2012-07-21 20 views
6

Tôi đang cố gắng tìm một giá trị nhất định (số ma thuật số nguyên (654321)) trong một quy trình đang chạy mà tôi hiện đang gắn với việc sử dụng GDB. Tôi đã tìm thấy lệnh find [/sn] start_addr, +len, val1 [, val2, ...], nhưng nó yêu cầu địa chỉ bắt đầu và địa chỉ kết thúc, nhưng tôi không biết bộ nhớ quá trình của tôi bắt đầu ở đâu và nó kết thúc ở đâu.Tôi làm cách nào để tìm kiếm tất cả bộ nhớ của một tiến trình trong gdb?

Điều này có vẻ là vấn đề rất phổ biến, nhưng tôi nhớ đã googling nó một năm trước, và tôi lặp lại rằng bây giờ không thành công, vì vậy .. Làm cách nào để biết bộ nhớ quá trình bắt đầu và kết thúc ở đâu?

Trả lời

4

Ý tưởng về "tất cả bộ nhớ" phức tạp trong một quy trình hiện đại. Những gì bạn thực sự có nhiều ánh xạ, từ các nguồn khác nhau. Bạn có thể liệt kê chúng (hãy chắc chắn không cố gắng đọc từ bản đồ mà không cần truy cập đọc! Ngoài ra, bạn có thể muốn áp dụng một số thông minh để bạn không kết thúc tìm kiếm các phần .text của thư viện được chia sẻ của bạn, v.v ...) đọc /proc/$pid/maps khi chạy, sau đó viết một cái gì đó để nạp gdb các lệnh thích hợp. Thành thật mà nói tôi nghĩ rằng nó có thể đơn giản nhất để viết một thói quen trong bản thân nhị phân để làm điều này và chỉ cần gọi nó từ gdb.

+0

Có manpage mô tả định dạng '/ proc/$ pid/maps' không? –

+0

@Jonas: http://kernel.org/doc/man-pages/online/pages/man5/proc.5.html – mark4o

+0

@ mark4o Cảm ơn bạn. Đã thử 'maps',' proc_maps' và 'procfs' mà không thành công. –

Các vấn đề liên quan