ค้นหาไลบรารีที่มีการเชื่อมโยงกับไบนารี


40

ฉันรู้ว่ามีคำสั่งที่แสดงรายการ libs และรุ่นที่เกี่ยวข้องกับซอฟต์แวร์ที่เชื่อมโยงกับฉัน

อะไรกับ ld หรือ libtool?

แต่ฉันจำไม่ได้ ใช้เวลากับ google แต่ไม่ได้คิดอะไรที่มีประโยชน์

การอัปเดต
ldd <binary>จะช่วยใน linux ( จาก @ Ernelli ) ในขณะที่ฉันพบว่าotool -L <binary>ทำสิ่งที่คล้ายกันใน MacOS X


คำตอบ:


41

ลอง ldd binary-exec

ตัวอย่าง:

~$ 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)

แดง! ดังนั้นความพยายามครั้งแรกของฉันถูกต้อง เพียงแค่ต้องติดตั้งบน Mac ของฉันดังนั้นมันจึงรู้คำสั่ง ;-)
er4z0r

@ er4z0r: FYI, Mac OS เป็น BSD, ไม่ลินุกซ์
grawity

6
grwaity: คุณพูดถูก ในขณะที่ ldd จะช่วยใน linux ฉันพบว่า 'otool -L <binary>' ทำสิ่งที่คล้ายกัน
er4z0r

15

หากต้องการค้นหาสิ่งที่ต้องการโดยตรง:

readelf -d APP | grep NEEDED

lddดังที่กล่าวไว้ในที่อื่นจะแสดง libs ทั้งทางตรงและทางอ้อม - ทุกอย่างที่ต้องการในรันไทม์ นี่อาจไม่ใช่รายการที่สมบูรณ์เนื่องจากคุณอาจเปิดรายการด้วย dlopen () แบบไดนามิก แต่สิ่งนี้ควรใช้งานได้ 99% ของเวลา

ld และ libtool ถูกนำมาใช้ในเวลารวบรวม / ลิงค์ มันไม่มีประโยชน์เมื่อคุณมีแอพ

แก้ไขฉันสามารถเห็นคำตอบในภายหลังที่คุณถามเกี่ยวกับ OSX แต่ฉันต้องการเพิ่มคำตอบของฉันในเครื่องมือ Linux:

สิ่งหนึ่งที่ฉันลืมพูดถึงเมื่อไม่นานมานี้; คุณถามเกี่ยวกับรุ่น ทั้งlddมิได้readelfจะตอบว่า "สิ่งที่รุ่น" คำถาม พวกเขาจะบอกชื่อไฟล์ของห้องสมุดที่คุณกำลังมองหาและการตั้งชื่ออาจมีข้อมูลบางอย่าง แต่ไม่มีอะไรบังคับใช้ สัญลักษณ์อาจเป็นรุ่นและคุณจะต้องมีระดับที่ต่ำกว่ามากnmเพื่อดูสิ่งเหล่านี้


9

อีกวิธีหนึ่งก็คือใช้ objdump

objdump -x "binary" | grep ต้องการ

สิ่งนี้แสดงการอ้างอิงที่จำเป็นทั้งหมดสำหรับไบนารีนี้เท่านั้น มีประโยชน์มาก.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.