LD_PRELOAD和strace之间有什么区别?

Ric*_*rez 4 hook system-calls strace ld-preload

这两种方法都用于收集系统调用以及参数和返回它们的值.当我们喜欢LD_PRELOAD和为什么?也许我们可以说我们只能收集系统调用,strace但我们可以通过LD_PRELOAD技巧收集库调用.但是,对于名称为的库,还有另一个跟踪器ltrace.

Bas*_*tch 5

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基于.

所有这些都是免费软件,你可以研究他们的源代码(并改进它).