【问题标题】:Disassembling shared library - which version is shown?反汇编共享库 - 显示哪个版本?
【发布时间】:2017-04-13 14:06:12
【问题描述】:

我正在使用 gdb 调试间歇性崩溃。我可以打开核心转储,看到崩溃发生在共享库中。 (我可以在回溯中看到库的函数名和文件名,虽然我没有库的源代码。)

同时,该库已更新,因此该文件名现在包含的库版本与生成核心转储时加载的版本不同。

我可以运行disassemble 来查看发生崩溃的函数的机器代码 - 但我会看到崩溃发生时正在使用的版本中的代码,还是 gdb 从磁盘上的库文件中加载代码,从而选择了不匹配的版本?

【问题讨论】:

    标签: gdb shared-libraries


    【解决方案1】:

    我会看到崩溃发生时正在使用的版本中的代码,还是 gdb 会从磁盘上的库文件中加载代码,从而选择不匹配的版本?

    后者(不匹配的版本)。

    默认情况下,可执行文件(和其他只读映射)保存在core 中以节省空间——其内容已在磁盘上可用。

    在 Linux 上,您可以要求系统保存只读映射:

    echo 0x7 > /proc/self/coredump_filter
    

    man 5 core

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 2018-10-07
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 2015-04-26
      相关资源
      最近更新 更多