0
我寫了一個簡單的程序,它只是調用一個名爲meller1的函數,它調用meller2,等等,直到某個函數調用free和crash。當該程序與核心轉儲文件運行GDB回溯,我得到:gdb backtrace如何知道每個函數從哪個庫中取出?
我的問題是,如何GDB BT知道自由是從/lib/libc.so.6取? 有沒有一種手動方式,我可以自己做一個Coredump文件和可執行文件本身? 謝謝。
我寫了一個簡單的程序,它只是調用一個名爲meller1的函數,它調用meller2,等等,直到某個函數調用free和crash。當該程序與核心轉儲文件運行GDB回溯,我得到:gdb backtrace如何知道每個函數從哪個庫中取出?
我的問題是,如何GDB BT知道自由是從/lib/libc.so.6取? 有沒有一種手動方式,我可以自己做一個Coredump文件和可執行文件本身? 謝謝。
我的問題是,gdb bt如何知道free是來自/lib/libc.so.6?
它沒有。 GDB所有人都知道(最開始時)是地址爲0xf7e3bf9c
。然後,GDB必須努力將該地址映射成有意義的東西。
GDB通過查看當前ELF圖像的加載映射以找到正確的圖像 - 這個圖像「覆蓋」給定的地址(這會賦予它/lib/libc.so.6
),然後讀取該ELF圖像中的符號表找出涵蓋給定地址的功能(最終生成free
)。
有沒有一種手動方式,我可以自己給它一個Coredump文件和可執行文件本身?
當然:GDB只是一個程序,你當然可以寫另一個程序來執行所有相同的步驟。它只會花你幾年的時間來編寫這樣的程序。