Linux
為什麼 nm 沒有顯示 /lib/i386-linux-gnu/libc.so.6 的符號?
我希望在libc.so.6文件中看到包括printf在內的符號數量。我使用nm工具找到它們,但是它說 libc.so.6 中沒有符號。
它可能已經去掉了它的正常符號,剩下的是它的動態符號,你可以用
nm -D
.
@PSkocik 回答了這個問題。我只想添加更多細節。ELF 中有兩種符號部分:
.symtab
和.dynsym
(有關詳細資訊,請參閱Linux 標準基礎核心規範,又名 LSB_5.0.0)。.symtab
用於共享庫本身的連結步驟。連結完成後,.symtab
不再需要該部分。該.dynsym
部分包含應該由動態連結器在執行時搜尋的重要符號。nm
預設情況下僅轉儲該.symtab
部分中的符號。LSB_5.0.0第 10.2.2.1 節,“ELF 節類型”,說符合標準的共享庫應該有一個
.symtab
或兩個,.dynsym
但不能兩者兼有。作為 ABI 庫的一部分,libc 被剝離出來.symtab
以符合規範。