Valgrind学习
2024-09-02 06:16:45
Valgrind与其他DBI(Pin, DynamoRIO)的区别
我们需要了解DBI的几个
D&R
Disassemble-and-Resynthesise
反汇编后重新组装
Valgrind采用这种方式,将Client中的代码全部翻译成IR,然后在IR级别进行instrument,最后将IR翻译成机器代码执行。
如果Client中的一段代码被翻译成IR,那么原来的native code就不再存在了,以后也不会再使用到。
Native Code --> IR --> IR --> Machine Code
^ ^ ^
| | |
| | |
translate | |
| |
instrument |
|
translate
C&A
Copy-and-Annotate
拷贝并添加注解
将Client中的native code原封不动地拷贝过来,并且对于每条指令都添加相应的注解,以解释这条指令的效果。
DynamoRIO是通过给每条指令添加一个额外的data structure;
Intel Pin是通过提供相应的获取指令相关信息的API;
这些添加的注解可以指导进行相应的instrument,并且底线是不影响原来的native code的执行效果。
Valgrind的IR
进行IR扫描时单元,在Valgrind 3.0.0版本之前,是basic block(单入口,单出口);
而在之后的版本中,换成了super block(单入口,多出口);
IR的特点是:
architecture-neutral
D&R
single-static-assignment(SSA)
每个IR block包含一组statements的列表,而每个statement又包含多个expression。
expression是pure的,即不依赖外部状态的。
expression可以是tree-IR,也可以是flat-IR,二者的区别在于:
tree-IR: complicated
flat-IR: simple, but need to introduce temporaries, and one tree-IR will expand to several flat-IR expressions.
but they(tree-IR) can also be flattened by introducing statements that write intermediate values to temporaries.
最新文章
- [No0000A8]Word中设置图片下的题注及插入多级列表编号
- 浅谈数据库优化方案--表和SQL
- ios开发之网络php
- 【Bootstrap】1.初识Bootstrap
- EL表达式-例子
- [GIF] GIF Loop Coder - Interpolation
- Asp.net: WebForm基础上构建Mvc的方法
- codevs 4511 信息传递(NOIP2015 day1 T2)
- Windows 8.1 with Update 镜像下载(增OEM单语言版)
- [js高手之路] html5 canvas系列教程 - 文本样式(strokeText,fillText,measureText,textAlign,textBaseline)
- (转)微信开发连接SAE数据库
- Python内置函数(29)——help
- Django REST framework基础:视图和路由
- Python 学习 第十四篇:命名元组
- winserver 2008 R2服务器安装IIS
- 根据日志分析异常:There is already 'XXX' bean method
- JS: 数组的循环函数
- 开发环境--Pipenv的使用
- Asyncio中Lock部分的翻译
- Fiddler 链接到逍遥安卓模拟器
热门文章
- C++——运行时类型识别RTTI
- 内核module读取进程页目录
- Leetcode代码复盘_分治法相关
- HTTP 请求及响应 (转)
- activiti7查询流程定义的相关信息
- layui 下拉框 动态获取数据
- html5中的拖拽功能
- 转 jmeter 等待时间 pacing think time
- MySQL总结02
- vmware安装minimal centos报错/etc/rc5.d/s99local : line:25 : eject : command not found