为什么同一个共享库在syslog和gdb中显示的加载地址不同?

5

我遇到了段错误。Syslog 报告如下:

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

1
我已经重新开启了,因为您的问题不是关于DLL,而是.so库。 - Jean-François Fabre
@Jean-FrançoisFabre 感谢您重新开放。您早期的评论是否仍然有效?为什么会出现地址不匹配的情况? - Karthik Raj Palanichamy
1
我可以谈论Windows和可恶的DLL,但在Linux上可能会有所不同。话虽如此,请注意有两个地址:理论地址和实际加载地址,因此对于Linux也可能存在相同的问题。除了对您的问题投票外,我无法提供更多帮助。 - Jean-François Fabre
1个回答

2
所以,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开始。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接