这两种方法都用于收集系统调用及其参数和返回值。当我们更愿意LD_PRELOAD
为什么?也许我们可以说我们只能通过以下方式收集系统调用strace
但我们可以收集图书馆的电话LD_PRELOAD
诡计。然而,还有另一个库的跟踪器,其名称是ltrace
.
strace
正在使用跟踪(2) http://www.kernel.org/doc/man-pages/online/pages/man2/ptrace.2.html系统调用(与PTRACE_SYSCALL
可能),所以会捕获每个系统调用(通过安装的内核挂钩ptrace
)。它适用于任何可执行文件,甚至静态链接的可执行文件,或者使用除您的发行版 GNU Glibc 以外的其他东西的可执行文件(例如musl-libc 库 http://www.musl-libc.org/,或一些汇编编写的实用程序,例如旧版本busybox
).
LD_PRELOAD
技巧使用动态加载器,例如/lib64/ld-linux-x86-64.so.2
or /lib/ld.so
(see ld.so(8) http://www.kernel.org/doc/man-pages/online/pages/man8/ld.so.8.html手册页)等...因此不适用于静态链接的可执行文件(或那些使用动态加载器和 GNU libc 之外的其他东西的可执行文件)。
ltrace
大概也是ptrace
based.
所有这些都是免费软件,您可以研究它们的源代码(并改进它)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)