[英]Shared libs load offsets missing in core dump
我从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
我的问题是如何确定其他指针是什么,以及是否无法确定大多数库的加载地址,这就是为什么堆栈值不能解析为符号的原因。
我的问题是...
如果在加载核心之前设置sysroot
,可能会得到更好的结果。 那是:
gdb ./a.out
(gdb) set sysroot rootfs/
(gdb) core ./core
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.