valgrind研究记录
一. 介绍
可以用来做内存检测工具、性能分析工具,基本原理是对目标二进制文件进行动态二进制翻译,翻译得到体系架构无关的中间表示(vex),然后在翻译得到的中间表示中插入自己的监控代码(instrument),最后再把修改过的vex编译成主机机器码执行,可以做到指令级别的监控,目标程序就相当于运行在一个虚拟的cpu上。
二. 整体架构
整个程序有个共用的入口,其它实现特定功能的模块都作为它的一个tool(memcheck、lackey),入口部分主要完成参数解析还有目标程序的加载,tool部分主要通过插桩完成业务逻辑。
架构图
三. valgrind提供的工具
-
Memcheck
这是valgrind应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况,比如:使用未初始化的内存,使用已经释放了的内存,内存访问越界等。这也是本文将重点介绍的部分。 -
Callgrind
它主要用来检