2013-01-17 98 views
1

gcc通常會將構建ID嵌入到共享對象中,以允許自動檢索符號以及共享對象本身。該計劃記錄在這裏:如何從核心文件獲取共享對象構建ID?

http://fedoraproject.org/wiki/Releases/FeatureBuildId

我有,我想分析一個用戶模式的核心轉儲,我知道,基於上面的文章,它極有可能包含了構建標識所有的我關心的共享對象(總共有幾十個)。如果我可以從核心轉儲中提取構建ID,那麼我可以在我們的存檔中找到正確的版本,並且能夠調試此核心轉儲(以及未來的核心轉儲)。

核心轉儲來自另一臺機器,我無法訪問該機器,我無法相信該機器上的用戶向我提供有關該機器上的哪些模塊的其他信息。

所以...任何想法什麼GDB命令或讀取精靈魔術會找到我這些生成ID?

回答

5

可以提取與eu-unstrip生成的ID,這是elfutils部分:

$ eu-unstrip -n --core core-file 
0x8048000+0x25d000 [email protected] - - [exe] 
0xb7790000+0x1000 [email protected] . - linux-gate.so.1 
0xb7771000+0x19000 [email protected] /lib/i686/cmov/libpthread.so.0 - libpthread.so.0 
0xb7768000+0x9000 [email protected] /lib/i686/cmov/librt.so.1 - librt.so.1 
0xb7672000+0xf5000 [email protected] /usr/lib/libstdc++.so.6 - libstdc++.so.6 
0xb764c000+0x26000 [email protected] /lib/i686/cmov/libm.so.6 - libm.so.6 
0xb762e000+0x1e000 [email protected] /lib/libgcc_s.so.1 - libgcc_s.so.1 
0xb74e7000+0x147000 [email protected] /lib/i686/cmov/libc.so.6 - libc.so.6 
0xb7791000+0x1d000 [email protected] /lib/ld-linux.so.2 - ld-linux.so.2 
+0

謝謝!那很完美。 –

+0

幸運的人在x86-64 :)。我嘗試了上面關於在Cavium(mips)上生成的核心轉儲以及我得到的(在Ubuntu 14.04上): eu-unstrip:無法連接到核心:此架構不支持放卷 – fencekicker