2012-09-12 47 views
0

我有一個不完整的stacktrace停止在一個已知的庫(linux i686體系結構)。爲了確定上次調用的函數,我試圖將$ eip作爲gdb的輸出映射到由「objdump -d library.so」生成的文件中的地址。 我想我可以使用gdb中「info shared」的From地址輸出,以及$ eip來計算偏移量,然後我可以將它轉換爲objdump -d輸出反彙編文本部分的偏移量? 不確定這種方法是否合理,但是在一個簡單的測試工具應用中使用共享庫來測試它並不會給我一個正確函數中的地址。 任何幫助非常感謝。

回答

0

我想我可以使用gdb中「info shared」的From地址輸出和$ eip來計算偏移量,然後我可以將它轉換爲反彙編文本部分的偏移量objdump -d輸出?

是的,那正是你需要做的。

GDB顯示中的From地址告訴您共享庫的.text部分位於何處。

readelf -S foo.so | grep '\.text'會告訴您在foo.so本身的抵消.text。從另一箇中減去一個,你得到該共享庫的重定位(它將是頁對齊的)。

現在從GDB的$eip,減去拆遷,你會得到將爲foo.so匹配nmobjdump輸出的地址。

但是,GDB已經在內部完成了上述所有步驟。如果無法推斷出哪個功能$eip結束了,則不應指望手動執行這些步驟會產生更好的結果。

相關問題