首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LD_PRELOAD和strace有什么不同?

LD_PRELOAD和strace有什么不同?
EN

Stack Overflow用户
提问于 2012-12-14 01:57:56
回答 1查看 1.6K关注 0票数 5

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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的。

所有这些都是自由软件,你可以研究它们的源代码(并改进它)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13865656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档