我的努力的細節如下,它們僅與我的問題部分相關:嵌入式linux:在/ proc/pid/maps中首次偏移錯誤?
在內核版本2.6.37.6的嵌入式Linux(arm)上的/ proc/pid/maps中,第一個行(可執行文件本身的代碼段)似乎是錯誤的。
我總是看到像的行:
00008000-00061000 R-XP 00000000 00:10 8073509 MYPROG
(範圍是在過程中的地址的地址空間,權限之後的數被認爲是文件的偏移量)
但是,實際的偏移似乎是0x8000 - 至少,使用這個假設的解釋看起來更可信。 nm顯示myprog在0x8000之前沒有代碼,所以這也是有道理的。
有人能給我一個指向我可以找到更多關於這個?我找不到任何東西。
我在做什麼:我寫了一個工具來解釋由mtrace()生成的日誌,查找可能的內存泄漏,並將它們追溯到分配數據的代碼。對於後一步,我從日誌中獲取指令指針,從/ proc/pid/maps的運行時映射中查找它,以查找所涉及的可執行文件或庫,並使用它們的nm-map來查找實際的函數做分配。
對於除了可執行文件本身以外的所有內容,這種工作方式非常有用。