檢視動態庫依賴3種方法
(1) $ ldd /bin/grep
linux-gate.so.1 => (0xffffe000)
libc.so.6 => /lib/libc.so.6 (0xb7eca000)
/lib/ld-linux.so.2 (0xb801e000)
(2) $ ld_trace_loaded_objects=1 /bin/grep
linux-gate.so.1 => (0xffffe000)
libc.so.6 => /lib/libc.so.6 (0xb7e30000)
/lib/ld-linux.so.2 (0xb7f84000)
(3) $ ld_trace_loaded_objects=1 /lib/ld-linux.so.2 /bin/grep
linux-gate.so.1 => (0xffffe000)
libc.so.6 => /lib/libc.so.6 (0xb7f7c000)
/lib/ld-linux.so.2 (0xb80d0000)
也可以通過readelf 檢視:
使用readelf,廢話不多少,直接上例子:
$ readelf -d /bin/ls | grep "shared library"
0x0000000000000001 (needed) shared library: [libselinux.so.1]
0x0000000000000001 (needed) shared library: [librt.so.1]
0x0000000000000001 (needed) shared library: [libacl.so.1]
另外ldd 的乙個安全問題
動態鏈結器是作業系統的一部分,負責按照可執行程式執行時的需要裝入與鏈結共享庫。裝入是指把共享庫在永久儲存上的內容複製到記憶體,鏈結是指填充跳轉表(jump table)與重定位指標。
其中:ld.so是unix或類unix系統上的動態鏈結器,常見的有兩個變體:
ld.so針對a.out格式的二進位制可執行檔案
ld-linux.so針對elf格式的二進位制可執行檔案
linux命令之檢視程式動態庫依賴 ldd
乙個程式依賴很多的動態庫,類似windows下的depends工具可以檢視exe程式的依賴庫是否找到。在linux下,可以通過ldd命令檢視程式是否能找到依賴的動態庫,從而排查是缺少庫還是由於環境變數配置不正確導致的程式無法啟動。在shell環境下輸入ldd help檢視ldd命令的選項 用法 ld...
linux下檢視動態鏈結庫so檔案的依賴的相關組建
我們很多c程式在windows下是以dll形式展現的,在linux則是以so 形式展現的。windows一般不會因為編譯dll檔案的編譯器版本不同而出先dll檔案不能執行。但是linux下,不同版本核心的linux下編譯的c程式,在其他版本的linux下就容易出現無法執行的問題。主要可能是支援程式的...
linux下檢視動態鏈結庫so檔案的依賴的相關元件
我們很多c程式在windows下是以dll形式展現的,在linux則是以so 形式展現的。windows一般不會因為編譯dll檔案的編譯器版本不同而出先dll檔案不能執行。但是linux下,不同版本核心的linux下編譯的c程式,在其他版本的linux下就容易出現無法執行的問題。主要可能是支援程式的...