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.

最新文章

  1. [No0000A8]Word中设置图片下的题注及插入多级列表编号
  2. 浅谈数据库优化方案--表和SQL
  3. ios开发之网络php
  4. 【Bootstrap】1.初识Bootstrap
  5. EL表达式-例子
  6. [GIF] GIF Loop Coder - Interpolation
  7. Asp.net: WebForm基础上构建Mvc的方法
  8. codevs 4511 信息传递(NOIP2015 day1 T2)
  9. Windows 8.1 with Update 镜像下载(增OEM单语言版)
  10. [js高手之路] html5 canvas系列教程 - 文本样式(strokeText,fillText,measureText,textAlign,textBaseline)
  11. (转)微信开发连接SAE数据库
  12. Python内置函数(29)——help
  13. Django REST framework基础:视图和路由
  14. Python 学习 第十四篇:命名元组
  15. winserver 2008 R2服务器安装IIS
  16. 根据日志分析异常:There is already 'XXX' bean method
  17. JS: 数组的循环函数
  18. 开发环境--Pipenv的使用
  19. Asyncio中Lock部分的翻译
  20. Fiddler 链接到逍遥安卓模拟器

热门文章

  1. C++——运行时类型识别RTTI
  2. 内核module读取进程页目录
  3. Leetcode代码复盘_分治法相关
  4. HTTP 请求及响应 (转)
  5. activiti7查询流程定义的相关信息
  6. layui 下拉框 动态获取数据
  7. html5中的拖拽功能
  8. 转 jmeter 等待时间 pacing think time
  9. MySQL总结02
  10. vmware安装minimal centos报错/etc/rc5.d/s99local : line:25 : eject : command not found