Giả sử chúng ta có một thư viện chia sẻ tên libtest.so, có một chức năng "foo" trong đónm vs "readelf -s"
sử dụng dải để loại bỏ tất cả các biểu tượng từ libtest.so
$strip libtest.so
như vậy, bây giờ nếu chúng ta sử dụng:
$nm libtest.so
nó sẽ in ra:
nm: libtest.so: không có biểu tượng
nhưng nếu chúng ta sử dụng:
$readelf -s libtest.so
chức năng foo vẫn có thể được nhìn thấy từ kết quả của nó:
...
10: 000005dc 5 FUNC GLOBAL DEFAULT 12 _Z3foov
...
chúng tôi cũng có thể sử dụng chuỗi lệnh để kiểm tra:
$strings libtest.so
...
_Z3foov
...
đây là câu hỏi của tôi, tại sao nm cho không có kết quả cho libtest.so sọc?
Cảm ơn
Tên người dùng của bạn thật tuyệt vời.Vì vậy, về cơ bản, nếu tôi liên kết một thư viện tĩnh với một nhị phân lúc biên dịch, các biểu tượng của thư viện sẽ hiển thị bằng nm, nhưng nếu tôi liên kết động, các ký hiệu sẽ hiển thị trong chính sách -S và nm -D, đúng không? – acib708
@ AlejandroCárdenas Tôi không tin rằng sự hiểu biết của bạn là khá chính xác. Ngoài ra, có sự khác biệt giữa 'readelf -s' và' readelf -S'. Có lẽ tốt hơn nên hỏi một câu hỏi riêng. –
Vâng, xin lỗi, tôi có nghĩa là readelf -s. Vâng, câu hỏi cốt lõi vẫn còn, tôi không hiểu sự khác biệt giữa nm và readelf -s kể từ khi bạn cho tôi biết những gì tôi hiểu là không chính xác. Bạn sẽ quan tâm để xây dựng thêm một chút, xin vui lòng? – acib708