c++ - 核心转储中缺少共享库负载偏移

标签 c++ gdb mips core openwrt

我从该平台的 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

我的问题是如何找出其他指针是什么,以及无法确定大多数库的加载地址是否是堆栈值未解析为符号的原因。

最佳答案

My question is ...

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

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

关于c++ - 核心转储中缺少共享库负载偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34040780/

相关文章:

c++ - boost 目录以包含访问者设计模式

c++ - C/C++ 指针数组的内联强制转换(void**)

c++ - 为什么std::cout无法为我的int8_t数字输出正确的值?

gdb - GDB 是否支持 "run time sampling"或者是否有用户 "extension"支持

android - 如何在 NDK r17+ 中支持具有 MIPS 架构的设备?

c - MIPS 中的 lw(也有点 C)

c++ - 用 str(const char*) 设置 std::stringstream 的内容会产生奇怪的后果

c++ - 指向无效内存时 sizeof(*ptr) 的行为是否未定义?

c++ - GDB Windows ??在回溯中

assembly - 使用 mips 汇编语言计算整数中的 1(没有任何控制指令流)