核心转储中缺少共享库加载偏移量
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
我的问题是,我如何才能弄清楚其他指针是什么,以及确定大多数库的加载地址失败是否是堆栈值不能解析为符号的原因。
我的问题是。。。
如果在加载core之前设置sysroot
,您可能会得到更好的结果。即:
gdb ./a.out
(gdb) set sysroot rootfs/
(gdb) core ./core
相关文章:
- std::原子加载和存储都需要吗
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 为什么加载SDF会导致Mobilizer创建闭环错误
- C++atioglxx.pdb未加载错误glBufferData OpenGL
- 如何使用tinyxml2从XML加载父实体和子实体
- 如何在C++中使用pybind11加载一个pickle python列表
- 如何从内存缓冲区加载张量流图
- 将张量流库加载到C++中
- 如何使用张量流的C++加载检查点和推理?
- 急切地加载整个模型以估计张量流的内存消耗
- LLVM - 从具有偏移量的指针加载变量
- 启用 ASLR 后,图像的所有部分是否每次都以相对于图像基址的相同偏移量加载
- C++ API 中的张量流加载模型并得到"from device: CUDA_ERROR_OUT_OF_MEMORY"错误
- 模拟动态加载程序以修复共享库偏移
- 如何在C/C++中从运行时卸载内存偏移量计算
- 从加载的 DLL 函数中获取文件偏移量
- 核心转储中缺少共享库加载偏移量
- vs2010和vs2005产生的Exe加载了不同的偏移量