核心转储中缺少共享库加载偏移量

Shared libs load offsets missing in core dump

本文关键字:加载 偏移量 共享 转储 核心      更新时间:2023-10-16

我在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

我的问题是,我如何才能弄清楚其他指针是什么,以及确定大多数库的加载地址失败是否是堆栈值不能解析为符号的原因。

我的问题是。。。

如果在加载core之前设置sysroot,您可能会得到更好的结果。即:

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