DynamoRIO(一)

接下来的项目要用到DynamoRIO,从今天开始学习,接下来把学习过程学到的知识和遇到的问题和大家分享一下,也作为备忘。

DynamoRIO下载地址:点击打开链接

还要用到的cmake下载地址:cmake下载地址

蛋疼的是,使用cmake还需要其他编译器(不知道我理解的对不对,看网上的资料和自己实践都是,没有安装其他编译器的机器上运行时总会提示找不到cl),例如vs,gcc等,所以没有其他编译器的就先安装编译器吧。


(一)、DynamoRIO介绍:

DynamoRIO是一个运行时代码控制系统(runtime code manipulation system),支持程序运行时对程序的任一部分进行修改。DynamoRIO给你对运行时代码流的完全控制,而且,修改不局限于trampoline insertion。DynamoRIO可以用于创建多种用途的动态工具,例如程序分析、插装、优化和翻译等等。


上面是在DynamoRIO的文档中翻译过来的,其实我现在用到的只是程序运行过程中信息的收集,所有现在先写与项目相关的部分,以后再写更复杂的使用。

我目前用到的功能其实就是利用DynamoRIO提供的api编写一个c文件,将其编译成dll文件后,DynamoRIO根据其中的规则收集我们感兴趣的信息,比如call列表等。刚开学学习的时候可以利用samples文件夹中的例子来学习使用方法,比如我用的就是其中的instrcalls.c,可以收集所有的call调用函数列表。


(二)、Windows下的使用

  根据DynamoRIO的文档,我们需要先修改一堆的配置,但是根据我的实践其实目前还不需要,只需要做以下简单的几步就可以体验到使用DynamoRIO的效果。

1.下载并安装cmake。cmake是用来编译写好的c文件的,需要使用cmake来将c文件编译成dll,不能用其他的编译器,因为DynamoRIO中有专门给cmake编译使用的规则。可以使用解压即可使用的绿色版,只是需要手动将cmake中bin文件夹的路径添加到系统环境变量里。

  2.下载并配置DynamoRIO。下载好后解压,然后把bin32文件夹的路径添加到环境变量中。(和上面的cmake一样,都是在path中添加)。


  3.配置好后,先使用cmake将写好的c文件编译成dll文件。这里我们用的是samples里的instrcalls.c,其实可以把samples里的所有c文件都编译了,随意选用一个来实验。使用以下命令来编译(在命令行窗口中,我的DynamoRIO文件存放在c盘根目录下,所以需要根据你存放DynamoRIO的路径进行修改):

cd c:\DynamoRIO

mkdir build

cd build

cmake -DDynamoRIO_DIR=c:\DynamoRIO\cmake c:\DynamoRIO\samples

稍等片刻,出现以下画面:

4.接下来,manul上写的是用这个命令:make instrcalls来最终编译成instrcalls.dll文件。但是我的环境中不行(用gcc等编译器的应该可以)。所以我就打开vs2010-->文件-->项目/解决方案-->c:\DynamoRIO\build\instrcalls.vcxproj,点击生成-->生成解决方案,完成生成,可在c:\DynamoRIO\build\bin文件夹中找到所有的dll文件。

5.接着,我们生成DynamoRIO的client,用记事本做例子。其实就是在用DynamoRIO打开notepad.exe的时候加载instrcalls.dll,利用dll中的规则生成log文件,这个例子中log文件包含所有的call调用。用以下命令:

drrun.exe -root c:\DynamoRIO -c c:\DynamoRIO\build\bin\instrcalls.dll -- notepad

注意:以上所有命令中空格都不可多不可少,错一点都会导致程序无法正确运行,所以实验的时候可以直接复制界面上的命令。

6.点击关闭notepad之后,可以进入c:\DynamoRIO\build\bin文件夹中查看log文件,如下图:

这两个txt文件都是调用的call,因为我们要的是所有的call调用,所以文件会很大。可以根据自己的需求编写c文件,生成dll后按照以上方法载入。


希望对大家有帮助,虽然DynamoRIO现在使用的人应该很少很少,论文我都没见多少篇,更别说公司用了,不过最起码也能作为一个我的备忘吧。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值