耿志逵

数位程序员

DynamoRIO工作原理

1. DynamoRIO架构

下图描述了DynamoRIO设计架构:
这里写图片描述
下图展示了DynamoRIO的各个组件是如何运转的:

这里写图片描述

2. 指令缓存(Code cache)

DynamoRIO是一个进程级别的emulation软件,工作在应用和操作系统之间。通过code caching, linking和 trace building提高了emulation的效率。
DynamoRIO运行的代码和应用程序本身的代码,通过context switch分开。应用程序代码被拷贝到指令缓存中。
这些缓存中的代码,会像原生代码一样执行,直到遇到一个跳转指令,应用的machine state会被保存,控制转回到DynamoRIO,去寻找跳转指令所在的basic block。(a context switch)
纯粹的emulation比原生代码执行慢大概300倍,如下图所示:
这里写图片描述
DynamoRIO通过引进code cache机制,可以把这个负荷降低到25倍左右:
这里写图片描述

2.1 基本块(Basic block)

dynamoRIO的basic block和编译器产生的basic block不太一样。因为dynamoRIO工作在运行时,考虑效率,没有对代码进行太多的分析。

2.2 链接(Linking)

把每个basic block都拷贝到一个code cache中,进行原生运行,这样很大地减少了解释运行的开销。然而,我们还是需要对每一个跳转指令进行解释,再返回到DynamoRIO中去寻找这个目标指令。
2.2.1 直接链接(Direct linking)
如果这个目标指令已经存在于code cache中,而且被直接跳转指令所指,DynamoRIO可以直接跳转到code cache中的目标指令,避免这次context switch的开销。
这里写图片描述
2.2.2 间接链接(Indirect branch)
条件转移指令不能像直接跳转指令一样进行link,因为它的目标不止一个。需要进行判断并查找队形的跳转目标。
这里写图片描述

2.3 执行流(Traces)

一些经常顺序执行的basic blcoks被组合到一个执行流中,这样就减少了分支,提高了程序的局部性。避免了对一些indirect branch的查找,因为我们已经把indirect brach的目标也放到这个trace里来了。

这里写图片描述

3. 透明(Transparency)

DynamoRO需要尽量做到透明,也就是说,不去影响应用程序本身的运行。但是由于DynamoRIO和应用程序同时运行在用户空间,所以想要做到透明,是有一些麻烦的。

3.1 资源使用冲突(Resource Usage Conflicts)

3.1.1 库透明(Library Transparency)
dynamoRIO在装载应用程序时,dynamoRIO本身的代码也会使用一些库(share libraries),如果同时应用程序也使用了同样的一个库,可能会造成一些冲突(比如:error code冲突)。
解决方法就是,DynamoRIO本身不使用库,在linux上直接调用system call,在windows上通过win32 API简介调用system call。
这里写图片描述
3.1.2 堆透明(Heap Transparency)
DynamoRIO自身分配的堆内存应该和应用程序申请的堆内存区分开来。
3.1.3 输入/输出透明(I/O Transparency)
DynamoRIO在做输入输出时,用的是自己写的I/O子程序,用来避免和应用程序的I/O缓冲区冲突。
3.1.4 同步透明(Synchronization Transparency)
共享锁的使用也会造成造成DynamoRIO和应用程序的冲突。

3.2 尽量不要对应用程序做修改

3.2.1 线程透明(Thread Transparency)
为了避免和应用程序的冲突,DynamoRIO本身没有创建自己的线程,而是寄生在应用进程的线程中,通过一个Contenxt Switch来区分DynamoRIO状态和应用状态。
3.2.2 栈透明(Stack Transparency)
DynamoRIO选择让应用进程的栈保持不变,它在每个线程中,都创建了一个自己私有的栈。

4. 可定制

DynamoRIO开发了一些event driven的API,可以让开发者自定义instrument指令。可以实现一些诸如:内存检查,性能测试,系统调用跟踪,代码覆盖率计算的工具。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gengzhikui1992/article/details/50790553
个人分类: 动态二进制分析
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

DynamoRIO工作原理

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭