จะดูออบเจ็กต์ที่แชร์ซึ่งโหลดอยู่ใน Linux ได้อย่างไร?


34

ฉันมีสองคำถามที่เกี่ยวข้อง:

  • ฉันจะดูได้อย่างไรว่ามีการโหลดไลบรารี่ที่แชร์หรือไม่? (เช่นทั้งระบบ, ผู้ไม่เชื่อเรื่องพระเจ้ากระบวนการ)
  • ฉันจะดูไลบรารีที่แชร์ทั้งหมดที่โหลดโดยกระบวนการได้อย่างไร

คำตอบ:


40

lsofคุณสามารถทำทั้งสองด้วย หากต้องการดูว่ากระบวนการใดที่ห้องสมุดเปิดหรือทำอยู่ให้ทำดังนี้

lsof /path/to/lib.so

และเพื่อดูว่าไฟล์ใด (รวมถึงไลบรารีที่แชร์) กระบวนการเปิดและ / หรือแมปให้ทำ:

lsof -p <pid>

22

อีกวิธีในการดูสิ่งที่โหลดในกระบวนการคือการดู/proc/PID/mapsไฟล์ สิ่งนี้แสดงทุกอย่างที่แมปไว้ในพื้นที่ที่อยู่ของคุณรวมถึงวัตถุที่แชร์ที่แมปไว้


ทำงานได้ดีบนแพลตฟอร์ม ARM แบบฝังของฉัน ในขณะที่การใช้งาน BusyBox ของlsofไม่ได้มีฟังก์ชั่นที่จำเป็น
Alex Che

7
sudo grep libcairo.so /proc/*/maps

เป็นวิธีที่ดีในการสำรวจทั้งหมดที่/proc/PID/maps กล่าวโดย Richในครั้งเดียว ตัวอย่างผลลัพธ์:

/proc/8390/maps:7f0a9afae000-7f0a9b0bc000 r-xp 00000000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8390/maps:7f0a9b0bc000-7f0a9b2bc000 ---p 0010e000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8390/maps:7f0a9b2bc000-7f0a9b2bf000 r--p 0010e000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8390/maps:7f0a9b2bf000-7f0a9b2c0000 rw-p 00111000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8466/maps:7f0a9afae000-7f0a9b0bc000 r-xp 00000000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8466/maps:7f0a9b0bc000-7f0a9b2bc000 ---p 0010e000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8466/maps:7f0a9b2bc000-7f0a9b2bf000 r--p 0010e000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8466/maps:7f0a9b2bf000-7f0a9b2c0000 rw-p 00111000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6

ต่อไป awkและ bash-fu สามารถปรับแต่งผลลัพธ์เพิ่มเติม

วิธีนี้ยังแสดงไลบรารีที่เปิดด้วยdlopenทดสอบกับการตั้งค่าขั้นต่ำนี้ซึ่งถูกแฮ็กด้วยกับsleep(1000)Ubuntu 18.04


4

คุณสามารถรันคำสั่งถัดไปโดยรูทและดูรายการทั้งหมด

cat /proc/*/maps | awk '{print $6;}' | grep '\.so' | sort | uniq

นี่สำหรับผู้ใช้ที่ไม่มี lsof


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