2018-03-24 18:51:04 +07:00
|
|
|
|
# 5.2.3 Valgrind
|
2018-05-29 20:51:00 +07:00
|
|
|
|
|
|
|
|
|
- [简介](#简介)
|
|
|
|
|
- [使用方法](#使用方法)
|
|
|
|
|
- [VEX IR](#vex-ir)
|
|
|
|
|
- [参考资料](#参考资料)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 简介
|
|
|
|
|
Valgrind 是一个用于内存调试、内存泄漏检测以及性能分析的动态二进制插桩工具。Valgrind 由 core 以及基于 core 的其他调试工具组成。core 类似于一个框架,它模拟了一个 CPU 环境,并提供服务给其他工具,而其他工具以插件的形式利用 core 提供的服务完成各种特定的任务。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 使用方法
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## VEX IR
|
|
|
|
|
VEX IR 是 Valgrind 所使用的中间表示,供 DBI 使用,后来这一部分被分离出去作为 libVEX,libVEX 负责将机器码转换成 VEX IR,转换结果存放在 cache 中。
|
|
|
|
|
|
|
|
|
|
顺便,再简单提一下其他的类似用途的 IR 还有:BAP、REIL、LLVM、TCG 等。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 参考资料
|
|
|
|
|
- [Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation](http://valgrind.org/docs/valgrind2007.pdf)
|
|
|
|
|
- [Optimizing Binary Code Produced by Valgrind](https://pdfs.semanticscholar.org/6761/acf36975d38fd5f616cb4798bfa3a92cbfa3.pdf)
|
|
|
|
|
- [libvex_ir.h](https://github.com/angr/vex/blob/dev/pub/libvex_ir.h)
|