繁体   English   中英

当我没有可用的共享库时,如何从 GDB 中的核心转储中获取共享库基址列表?

[英]How do I get a list of shared library base addresses from a core dump in GDB when I don't have the shared library available?

我有一个来自另一台机器的核心转储,但我没有在崩溃进程中加载的所有共享库。 我无法登录到机器或重现安装 state。我绝对无法在本地重现该错误。

触发这个核心转储的崩溃是在我本地目前没有的一个共享库中,但我不知道是哪个。

bt没有给我任何关于哪个共享库与地址相关联的提示。 这是 output 的片段:

(gdb) bt
#0  0x00007f4356396c21 in ?? ()
#1  0x00007f4356365009 in ?? ()

有人可能认为info shared可以解决问题,但这似乎只显示了 gcc 能够在本地找到的共享库的地址范围。

(gdb) info shared
From                To                  Syms Read   Shared Object Library
0x00007f43ac42a0c0  0x00007f43ac4b3766  Yes (*)     /usr/lib/x86_64-linux-gnu/libX11.so.6
                                        No          /usr/lib/x86_64-linux-gnu/libGL.so.1

也许我的崩溃是在 libGL.so.1 中,但我怎么知道,因为我没有可使用的地址范围? 也许它在进程中的其他 50 个共享库之一中。 有没有一种合理的方法可以让我发现崩溃地址的来源,大概是通过列出所有共享库地址范围? 如果我知道这来自哪个库,我可能能够获取原始文件,或者在 .map 文件中挖掘以手动重现我的调用堆栈。

有没有一种合理的方法可以让我发现崩溃地址的来源,大概是通过列出所有共享库地址范围?

假设您在另一台机器上有一个相当新的 kernel(大约 2015 年或更新),运行readelf -n core应该会产生包含所有相关信息的NT_FILE注释。

这是/bin/sleep 60 & X=$;; sleep 1; kill -ABRT $X的样子/bin/sleep 60 & X=$;; sleep 1; kill -ABRT $X /bin/sleep 60 & X=$;; sleep 1; kill -ABRT $X

$ readelf -n core

Displaying notes found at file offset 0x00000580 with length 0x00001450:
  Owner                Data size        Description
  CORE                 0x00000150       NT_PRSTATUS (prstatus structure)
  CORE                 0x00000088       NT_PRPSINFO (prpsinfo structure)
  CORE                 0x00000080       NT_SIGINFO (siginfo_t data)
  CORE                 0x00000150       NT_AUXV (auxiliary vector)
  CORE                 0x00000399       NT_FILE (mapped files)
    Page size: 4096
                 Start                 End         Page Offset
    0x0000563775c50000  0x0000563775c52000  0x0000000000000000
        /usr/bin/sleep
    0x0000563775c52000  0x0000563775c57000  0x0000000000000002
        /usr/bin/sleep
    0x0000563775c57000  0x0000563775c59000  0x0000000000000007
        /usr/bin/sleep
    0x0000563775c59000  0x0000563775c5a000  0x0000000000000009
        /usr/bin/sleep
    0x0000563775c5a000  0x0000563775c5b000  0x000000000000000a
        /usr/bin/sleep
    0x00007f8228800000  0x00007f8228ae9000  0x0000000000000000
        /usr/lib/locale/locale-archive
    0x00007f8228c00000  0x00007f8228c28000  0x0000000000000000
        /usr/lib/x86_64-linux-gnu/libc.so.6
    0x00007f8228c28000  0x00007f8228d98000  0x0000000000000028
        /usr/lib/x86_64-linux-gnu/libc.so.6
    0x00007f8228d98000  0x00007f8228df0000  0x0000000000000198
        /usr/lib/x86_64-linux-gnu/libc.so.6
    0x00007f8228df0000  0x00007f8228df4000  0x00000000000001f0
        /usr/lib/x86_64-linux-gnu/libc.so.6
    0x00007f8228df4000  0x00007f8228df6000  0x00000000000001f4
        /usr/lib/x86_64-linux-gnu/libc.so.6
    0x00007f8228f97000  0x00007f8228f99000  0x0000000000000000
        /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
    0x00007f8228f99000  0x00007f8228fbf000  0x0000000000000002
        /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
    0x00007f8228fbf000  0x00007f8228fca000  0x0000000000000028
        /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
    0x00007f8228fca000  0x00007f8228fcc000  0x0000000000000033
        /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
    0x00007f8228fcc000  0x00007f8228fce000  0x0000000000000035
        /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
  CORE                 0x00000200       NT_FPREGSET (floating point registers)
...

您还可以使用eu-unstrip相关答案):

eu-unstrip -n --core core
0x563775c50000+0xb000 1984a78956c92ad376412aabc85955f20d444fe5@0x563775c50368 . - /usr/bin/sleep
0x7ffde4b8e000+0x1000 2959b90435d422fde8e4f977259e42d551499b04@0x7ffde4b8e554 . - linux-vdso.so.1
0x7f8228f97000+0x362b8 a897a1105e21dd270bd418fe58c441700a6d8ec5@0x7f8228f97248 /lib64/ld-linux-x86-64.so.2 /usr/lib/debug/.build-id/a8/97a1105e21dd270bd418fe58c441700a6d8ec5.debug ld-linux-x86-64.so.2
0x7f8228c00000+0x202f90 532d686f61d5422a2617967cbfbecfd4bd6a39c7@0x7f8228c00380 /lib/x86_64-linux-gnu/libc.so.6 /usr/lib/debug/.build-id/53/2d686f61d5422a2617967cbfbecfd4bd6a39c7.debug libc.so.6

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM