2012-02-20 11 views
13

Tôi có một thư mục trong linux, chứa một số tệp đối tượng được chia sẻ (* .so). Làm thế nào tôi có thể tìm thấy chức năng trong các tập tin đối tượng được chia sẻ bằng cách sử dụng các hàm objdump và bash trong linux?Làm thế nào tôi có thể tìm thấy chức năng trong các tệp đối tượng được chia sẻ bằng cách sử dụng các hàm objdump và bash trong linux?

Ví dụ, ví dụ sau được tìm thấy tôi chức năng func1 trong mylib.so:

objdump -d mylib.so | grep func1 

Nhưng tôi muốn tìm func1 trong thư mục đó chứa file đối tượng chia sẻ. Tôi không biết ngôn ngữ bash và cách kết hợp các lệnh terminal linux.

Trả lời

23

nm đơn giản hơn objdump, cho tác vụ này.
nm -A *.so | grep func sẽ hoạt động. Cờ -A cho biết nm để in tên tệp.

+0

Bạn cần 'tùy chọn -D' cũng như để thực sự nhìn vào danh sách các biểu tượng xuất khẩu. –

+0

@ jørgensen, nó không phải là rõ ràng từ câu hỏi liệu anh ta muốn một chức năng xuất khẩu. Có lẽ anh ta muốn biết anh ta cần xây dựng thư viện gì sau khi thay đổi một chức năng. – ugoren

2

Bạn có thể sử dụng cũng sử dụng,

find <path> -name "*.so" -exec nm {} \; | grep func1 
+1

'grep func1 nm {}' ?? Bạn có nghĩa là 'nm {} | grep func1'? – ugoren

+1

Bạn sẽ chạy nm | grep func1, việc thực hiện là từ trái sang phải nếu bạn đang sử dụng nó mà không có exec. Nhưng với exec thực hiện là từ phải sang trái và {} xác định đầu vào từ lệnh find, do đó, lệnh trên có nghĩa là 'chạy grep trên kết quả của nm cho tất cả các tập tin từ tìm'. – Deepak

+1

Tôi đã thử dòng của bạn - nó không hoạt động. Nó chỉ chạy 'grep func1 nm xxx.so' cho mỗi tệp, tìm kiếm' func1' trong một tệp có tên là "nm" và trong tệp nhị phân (không chạy nm). – ugoren

Các vấn đề liên quan