【问题标题】:Why do syslog and gdb show different load address for the same shared library?为什么 syslog 和 gdb 为同一个共享库显示不同的加载地址?
【发布时间】:2018-10-10 12:06:07
【问题描述】:

我遇到了分段错误。系统日志报告以下内容:

segfault at 0 ip 00000000f71ff256 sp 00000000f44fee50 error 4 in libprotobuf-c.so.0.0.0[f71f8000+f000]

所以,libprotobuf-c.so 在0xf71f8000 加载。当我在 gdb 中加载相应的核心文件并尝试info sharedlibrary 时,它显示FROM 地址为0xf71f9f70,这与 syslog 显示的不同。我无法理解这种不匹配。有人可以帮忙吗?

0xf71f9f70  0xf7204028  Yes (*)     /usr/lib/libprotobuf-c.so.0

【问题讨论】:

  • 我已经重新打开了,因为您的问题不是关于 DLL,而是关于 .so 库
  • @Jean-FrançoisFabre 感谢您重新打开。您之前对这种行为的评论是否仍然有效?为什么地址不匹配?
  • 我可以谈论 Windows 和该死的 DLL,但在 Linux 上可能不同。也就是说,请注意有 2 个地址:理论地址和实际加载地址,所以对于 linux,问题可能是相同的。除了对您的问题进行投票之外,我无法提供更多帮助。

标签: c linux gdb shared-libraries


【解决方案1】:

所以,libprotobuf-c.so 被加载到 0xf71f8000。当我在 gdb 中加载相应的核心文件并尝试 info sharedlibrary 时,它显示 FROM 地址为0xf71f9f70,这与 syslog 显示的不同。

其实它们一样的。 GDB 将.text 的开头显示为From 地址。

如果您执行readelf -WS /usr/lib/libprotobuf-c.so.0 | grep '\.text',您会发现.text0xf71f9f70 - 0xf71f8000 == 0x1f70 开头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 2020-10-02
    • 2020-10-31
    • 2022-11-29
    • 1970-01-01
    • 2019-04-17
    相关资源
    最近更新 更多