ltrace的原理

来源:互联网 发布:路由器网管软件 编辑:程序博客网 时间:2024/04/29 04:25
ltrace的功能是能够跟踪进程的库函数调用,它是如何实现的呢?
 
在ltrace源代码从chinaunix.net中下载下来,做了一个粗略的分析。
 
ltrace其实也是基于ptrace。我们知道,ptrace能够主要是用来跟踪系统调用,那么它是如何跟踪库函数呢?
 
首先ltrace打开elf文件,对其进行分析。在elf文件中,出于动态连接的需要,需要在elf文件中保存函数的符号,供连接器使用。具体格式,大家可以参考elf文件的格式。
 
这样ltrace就能够获得该文件中,所有系统调用的符号,以及对应的执行指令。然后,ltrace将该指令所对应的4个字节,替换成断点。其实现大家可以参考Playing with ptrace, Part II
 
这样在进程执行到相应的库函数后,就可以通知到了ltrace,ltrace将对应的库函数打印出来之后,继续执行子进程。
 
实际上ltrace与strace使用的技术大体相同,但ltrace在对支持fork和clone方面,不如strace。strace在收到frok和clone等系统调用后,做了相应的处理,而ltrace没有。
 


本文转自:http://blog.chinaunix.net/space.php?uid=20361370&do=blog&id=1962493

原创粉丝点击