2015-12-08 27 views
0

我寫了一個簡單的程序,它只是調用一個名爲meller1的函數,它調用meller2,等等,直到某個函數調用free和crash。當該程序與核心轉儲文件運行GDB回溯,我得到:gdb backtrace如何知道每個函數從哪個庫中取出?

gdb bt

我的問題是,如何GDB BT知道自由是從/lib/libc.so.6取? 有沒有一種手動方式,我可以自己做一個Coredump文件和可執行文件本身? 謝謝。

回答

1

我的問題是,gdb bt如何知道free是來自/lib/libc.so.6?

它沒有。 GDB所有人都知道(最開始時)是地址爲0xf7e3bf9c。然後,GDB必須努力將該地址映射成有意義的東西。

GDB通過查看當前ELF圖像的加載映射以找到正確的圖像 - 這個圖像「覆蓋」給定的地址(這會賦予它/lib/libc.so.6),然後讀取該ELF圖像中的符號表找出涵蓋給定地址的功能(最終生成free)。

有沒有一種手動方式,我可以自己給它一個Coredump文件和可執行文件本身?

當然:GDB只是一個程序,你當然可以寫另一個程序來執行所有相同的步驟。它只會花你幾年的時間來編寫這樣的程序。

相關問題