为什么 nm libc.so 报告没有符号?
Why nm libc.so reports no symbols?
我构建了一个像这样的简单程序:
g++ application.cpp -o application.exe
然后执行命令;
ldd application.exe
...
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
...
我要列出libc库的所有符号:
nm /lib/x86_64-linux-gnu/libc.so.6
nm: /lib/x86_64-linux-gnu/libc.so.6: no symbols
nm --defined-only /lib/x86_64-linux-gnu/libc.so.6
nm: /lib/x86_64-linux-gnu/libc.so.6: no symbols
为什么 nm 报告没有符号?如果 libc.so.6 不是图书馆,而是某种 link 到实际图书馆,那么我怎样才能找到实际图书馆?
默认情况下,nm
读取 ELF 对象中的 .symtab
部分,这在非 relocatable 对象中是可选的。使用-D
/--dynamic
option,可以指示nm
读取动态符号table(即运行时实际使用的符号)。您可能还想使用 --with-symbol-versions
,因为 glibc 广泛使用符号版本控制。
或者,您可以使用 eu-readelf --symbols=.dynsym
或 objdump -Tw
。 (readelf -sDW
不包括符号版本控制信息。)
我构建了一个像这样的简单程序:
g++ application.cpp -o application.exe
然后执行命令;
ldd application.exe
...
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
...
我要列出libc库的所有符号:
nm /lib/x86_64-linux-gnu/libc.so.6
nm: /lib/x86_64-linux-gnu/libc.so.6: no symbols
nm --defined-only /lib/x86_64-linux-gnu/libc.so.6
nm: /lib/x86_64-linux-gnu/libc.so.6: no symbols
为什么 nm 报告没有符号?如果 libc.so.6 不是图书馆,而是某种 link 到实际图书馆,那么我怎样才能找到实际图书馆?
默认情况下,nm
读取 ELF 对象中的 .symtab
部分,这在非 relocatable 对象中是可选的。使用-D
/--dynamic
option,可以指示nm
读取动态符号table(即运行时实际使用的符号)。您可能还想使用 --with-symbol-versions
,因为 glibc 广泛使用符号版本控制。
或者,您可以使用 eu-readelf --symbols=.dynsym
或 objdump -Tw
。 (readelf -sDW
不包括符号版本控制信息。)