Tại sao nm không hiển thị ký hiệu cho /lib/i386-linux-gnu/libc.so.6?


31

Tôi dự kiến ​​sẽ thấy số lượng biểu tượng trong tệp libc.so.6 bao gồm printf . Tôi đã sử dụng công cụ nm để tìm chúng, tuy nhiên nó nói rằng không có ký hiệu nào trong libc.so.6.

Câu trả lời:


54

Có lẽ nó đã bị tước biểu tượng thường xuyên và những gì còn lại là biểu tượng động mà bạn có thể nhận được nm -D.


11

@PSkocik đã trả lời điều này. Tôi chỉ muốn thêm chi tiết. Có hai loại phần ký hiệu trong ELF: .symtab.dynsym(xem Thông số kỹ thuật lõi cơ sở tiêu chuẩn Linux, còn gọi là LSB_5.0.0 , để biết chi tiết). .symtablà cho bước liên kết của chính lib được chia sẻ. Sau khi liên kết xong, .symtabphần không còn cần thiết nữa. Phần .dynsymnày chứa các ký hiệu quan trọng được cho là được tìm kiếm bởi trình liên kết động khi chạy. nmtheo mặc định chỉ bỏ các ký hiệu trong .symtabphần.

LSB_5.0.0 Mục 10.2.2.1, Kiểu ELF Phần EL, cho biết một lib chia sẻ phù hợp nên có .symtabhoặc .dynsymkhông có cả hai. Là một phần của thư viện ABI, libc bị loại ra khỏi tiêu .symtabchuẩn tuân thủ.


0

Tìm hiểu xem nó là một đối tượng được chia sẻ, hoặc, một tệp ASCII thông thường. Nếu đó là một đối tượng được chia sẻ, bạn sẽ thấy "Đối tượng chia sẻ LSB 32 bit ELF"

file /lib/i386-linux-gnu/libc.so.6

libc.so.6đang rụng trứng một đối tượng chia sẻ.
Gilles 'SO- ngừng trở nên xấu xa'

Tôi không bao giờ giả định trong một môi trường Linux. Xem xét một ai đó có thể đã chạm vào các thư mục gốc. Vâng, theo tên rõ ràng nó là một đối tượng chia sẻ. Và, nó không đau để xác minh; khi bạn không nhận được đầu ra mong đợi.
jncc99
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.