我想訪問保存在沒有調試符號的程序的核心轉儲中的幀(我想在C中執行此操作)。當我打開程序和GDB中的核心轉儲時,我得到一個包含函數名稱的堆棧跟蹤。例如:如何從核心轉儲(無GDB)讀取幀?
(gdb) bt
#0 0x08048443 in layer3()
#1 0x08048489 in layer2()
#2 0x080484c9 in layer1()
#3 0x0804854e in main()
所有函數的名稱都存儲在可執行文件的.strtab節中。我如何建立不同幀的堆棧跟蹤?在批處理模式下運行GDB是而不是的一個選項。也只是「從gdb中複製需要的部分」也是一個壞主意,因爲代碼不是獨立編寫的。
所以爲了更準確地提出我的問題:我在哪裏可以找到一個核心轉儲內的點,以便我可以開始讀取堆棧信息?是否有某種類型的圖書館可以訪問這些信息?我可以使用的結構?或者甚至更好,文檔如何在覈心轉儲中構建這些信息?
(我已經看到了這個問題:「how to generate a stack trace from a core dump file in C, without invoking an external tool such as gdb」,但由於沒有有效的答案,我想我會再問吧)
[編輯]我在Linux下的x86這樣
Windows,Linux或MacOS的? x86,x86_64,PPC,Arm ....? – Flexo
哦,天哪,我很抱歉,忘了! Linux,x86 – Uhlo
http://www.kernel.org/doc/man-pages/online/pages/man5/core.5.html – Flexo