这两种方法都用于收集系统调用以及系统调用的参数和返回值。什么时候我们更喜欢LD_PRELOAD?为什么?也许我们可以说我们只能通过strace收集syscall,但是我们可以用LD_PRELOAD技巧收集库调用。但是,还有另一个库跟踪器,它的名称是ltrace。
发布于 2012-12-14 03:01:49
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的。
所有这些都是自由软件,你可以研究它们的源代码(并改进它)。
https://stackoverflow.com/questions/13865656
复制相似问题