2012-12-13 34 views
2

這兩種方法都用於收集系統調用參數並返回它們的值。當我們更喜歡LD_PRELOAD,爲什麼?也許我們可以說我們只能通過strace收集系統調用,但我們可以通過LD_PRELOAD收集圖書館電話。然而,還有另一個追蹤者名爲ltrace的圖書館。LD_PRELOAD和strace之間有什麼區別?

回答

3

strace正在使用系統調用ptrace(2)(可能與PTRACE_SYSCALL),所以會捕獲每個系統調用(通過由ptrace安裝的內核鉤子)。它可以在任何可執行文件上工作,即使在靜態鏈接的文件上,也可以在你的發行版的GNU Glibc之外使用(比如musl-libc,或者一些像舊版本busybox這樣的彙編書寫工具)。

LD_PRELOAD技巧使用動態加載器例如, /lib64/ld-linux-x86-64.so.2/lib/ld.so(請參閱ld.so(8)手冊頁)等...因此無法與靜態鏈接的可執行文件(或使用其他動態加載器和您的GNU libc以外的其他文件)一起使用。

ltrace也可能是ptrace的依據。

而所有這些都是免費軟件,你可以研究他們的源代碼(並改進它)。

相關問題