2015-12-02 40 views
1

我在該平臺的cross-gdb中從MIPS openwrt進程加載了核心轉儲。堆棧跟蹤是沒有幫助,我試圖找出它從堆棧指針墜毀:核心轉儲中缺少共享庫加載偏移

Program terminated with signal 6, Aborted. 
#0 0x77ce2810 in ??() 
(gdb) set sysroot rootfs/ 
Loaded symbols for rootfs/lib/libc.so.0 

[...more lines while loading symbols...] 

(gdb) info sharedlibrary 
From  To   Syms Read Shared Object Library 
         Yes (*)  rootfs/lib/libssp.so.0 
         Yes (*)  rootfs/lib/libdl.so.0 
         Yes (*)  rootfs/lib/libpthread.so.0 
         Yes (*)  rootfs/usr/lib/libstdc++.so.6 
         Yes (*)  rootfs/lib/libm.so.0 
         Yes (*)  rootfs/lib/libgcc_s.so.1 
         Yes (*)  rootfs/lib/libc.so.0 
         Yes (*)  rootfs/lib/ld-uClibc.so.0 
0x77bea200 0x77c70de0 Yes (*)  rootfs/lib/libbdnc.so 
         No   /usr/lib/libssl.so 
         No   /usr/lib/libcrypto.so 
         Yes (*)  rootfs/usr/lib/libz.so 
(*): Shared library is missing debugging information. 

Libbdnc是我看到加載地址唯一的一個。它通過dlopen()加載。其餘的通過-l鏈接到可執行文件中。它們都存在於rootfs /中,但顯然沒有被set sysroot拾取。

堆棧的頂部看起來是這樣的:

(gdb) x/50a $sp  
0x76fafe88: 0x427370 <stderr> 0x77d04000 0x77df70b4 0x77cf4000 
0x76fafe98: 0x0 0x1 0x77e9f000 0x427370 <stderr> 
0x76fafea8: 0x77d033a0 0x77df70b4 0x77df70c4 0x420000 
0x76faffb8: 0x0 0x0 0x77e33160 0x0 
0x76faffc8: 0x0 0x40ee98 <bdnc_init+176> 0x0 0x0 

我的問題是我怎麼能找出其他的指針是什麼,以及未能確定大部分庫的加載地址是否是爲什麼堆棧值不會解析爲符號。

回答

1

我的問題是...

你可能會得到更好的結果,如果你加載內核之前設置sysroot。那就是:

gdb ./a.out 
(gdb) set sysroot rootfs/ 
(gdb) core ./core