【发布时间】:2012-11-01 21:04:21
【问题描述】:
在文件上执行ldd 时,它会返回一个包含在括号中的十六进制数字,用于它找到的每个库。
例如:
root@server> ldd wpa_supplicant
linux-gate.so.1 => (0xb779b000)
libnl.so.1 => /usr/lib/libnl.so.1 (0xb774d000)
libssl.so.1.0.0 => not found
libcrypto.so.1.0.0 => not found
libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7748000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb75ed000)
libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb75c7000)
/lib/ld-linux.so.2 (0xb779c000)
如果十六进制数字不是可执行文件所链接的库之一,则可能会出现版本信息错误。
我有两个问题:
- 这个值是从哪里来的?
- 如何找出可执行文件正在寻找的十六进制值? (即它最初链接的那个)
【问题讨论】:
-
我不确定,但我认为十六进制数字与库的版本没有任何关系 - 我认为这是该库的(建议/预期)地址执行时将映射到程序地址空间。要查看您需要的库版本,请尝试
ldd -v。 -
如果这些值在您每次运行 ldd 时都没有改变,只需将该系统撕成碎片并使用真实、安全且最新的 Linux 系统。
-
我认为还需要注意的是,这个十六进制地址可能会有所不同,如下所示:stackoverflow.com/questions/2217023/…