Tìm thư viện một nhị phân được liên kết với


40

Tôi biết rằng có một lệnh liệt kê cho tôi các lib và các phiên bản tương ứng mà một phần mềm được liên kết với.

Một cái gì đó với ld hoặc libtool?

Nhưng tôi chỉ không thể nhớ. Đã dành một chút thời gian trên google nhưng không tìm thấy bất cứ điều gì hữu ích.

Cập nhật
ldd <binary> sẽ giúp ích cho linux, ( từ @ Ernelli ) trong khi tôi thấy otool -L <binary>điều đó tương tự trên MacOS X.


Câu trả lời:


41

Hãy thử ldd binary-exec

Thí dụ:

~$ ldd /bin/bash
    linux-gate.so.1 =>  (0x00606000)
    libncurses.so.5 => /lib/libncurses.so.5 (0x00943000)
    libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x00c5d000)
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x003e9000)
    /lib/ld-linux.so.2 (0x00a41000)

Đăng! Vì vậy, lần thử đầu tiên của tôi là đúng. Chỉ cần cài đặt nó trên máy Mac của tôi để nó biết rõ lệnh này ;-)
er4z0r

@ er4z0r: FYI, Mac OS là BSD, không phải Linux .
grawity

6
grwaity: bạn đúng Trong khi ldd sẽ giúp trên linux, tôi thấy rằng 'otool -L <binary>' làm điều gì đó tương tự.
er4z0r

15

Để tìm những gì nó cần trực tiếp:

readelf -d APP | grep NEEDED

lddnhư đã đề cập ở nơi khác sẽ hiển thị tất cả các lib trực tiếp và gián tiếp - mọi thứ nó cần trong thời gian chạy. Đây có thể không phải là một danh sách đầy đủ, vì bạn có thể tự động mở mọi thứ với dlopen (), nhưng điều này sẽ hoạt động 99% thời gian.

ld và libtool được sử dụng tại thời gian biên dịch / liên kết. Chúng không hữu ích khi bạn có một ứng dụng.

EDIT Tôi có thể thấy bằng các câu trả lời sau mà bạn đã hỏi về OSX, nhưng tôi muốn thêm vào câu trả lời của mình trên các công cụ Linux:

Một điều tôi quên đề cập, cách đây khá lâu; bạn hỏi về các phiên bản. Không lddphải cũng readelfsẽ không trả lời câu hỏi "phiên bản nào". Họ sẽ cho bạn biết tên tệp của thư viện mà bạn đang tìm kiếm và quy ước đặt tên có thể có một số thông tin phiên bản, nhưng không có gì bắt buộc điều này. Các biểu tượng có thể được phiên bản, và bạn sẽ phải thực hiện nhiều hơn về cấp độ thấp hơn nmđể thấy những biểu tượng này,


9

Một cách khác là sử dụng objdump.

objdump -x "nhị phân" | grep CẦN

Điều này cho thấy tất cả các phụ thuộc cần thiết chỉ cho nhị phân này. Rất hữu dụng.

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.