2012-07-21 120 views
6

我正試圖在當前使用GDB連接的正在運行的進程中查找某個值(整數幻數(654321))。 我發現了一個find [/sn] start_addr, +len, val1 [, val2, ...]命令,但它需要開始和結束地址,但我不知道我的進程內存在哪裏啓動以及它在哪裏結束。如何在gdb中搜索進程的所有內存?

這似乎是一個非常普遍的問題,但我記得一年前使用Google搜索,現在我沒有重複,現在沒有成功,所以.. 如何知道進程內存的起始位置和結束位置?

回答

4

「所有記憶」的想法在現代化過程中是複雜的。你真正擁有的來自不同來源的許多映射。你可以枚舉這些(確保不要嘗試從沒有讀取權限的地圖上讀取!另外,你可能想要應用一些智能,以便最終不會搜索共享庫的.text部分等)在運行時讀取/proc/$pid/maps,然後編寫腳本給gdb提供適當的命令。老實說,我認爲在二進制文件中編寫例程可能是最簡單的,只需從gdb調用它即可。

+0

是否有描述'/ proc/$ pid/maps'格式的聯機幫助頁? – 2012-07-21 17:08:38

+0

@Jonas:http://kernel.org/doc/man-pages/online/pages/man5/proc.5.html – mark4o 2012-07-21 17:12:37

+0

@ mark4o謝謝。試過'maps','proc_maps'和'procfs'沒有成功。 – 2012-07-21 17:16:17