//全文以ia32为例,intel64需要将涉及到ia32的地方替换成intel64
构建pintool
首先把pintool(C或者C++)写好。然后参照如下格式:
- (1)将某个目录下的所有tool都构建起来
$ cd source/tools/ManualExamples//这是tool的目录
$ make all TARGET=ia32
- (2) 将某个目录下的某一个tool构建起来
$ cd source/tools/ManualExamples
$ make inscount0.test TARGET=ia32//inscount0.test必须在上面的目录里
- (3) 将某个目录下的某一个tool构建起来,但是不运行
$ cd source/tools/ManualExamples
$ make obj-ia32/inscount0.so TARGET=ia32
pintool的使用
一个简单的例子。使用inscount.so来对一个程序执行的指令数进行计数
假设需要被计数的程序为ls(显示主文件夹的文件名字及后缀。关于ls指令可参考这个博客的内容https://www.cnblogs.com/SZ2015/p/7691094.html)
指令如下:
$ ./pin -t source/tools/ManualExamples/obj-ia32/inscount0.so -o inscount0.log -- /bin/ls
//此时我为了方便,已经将执行目录设置成了pin的目录,也就是主目录
此时运行计数tool,就可以在终端输出ls程序的指令个数了
如果想让执行结果输出到某一个文件,指令如下:
$ ./pin -t source/tools/ManualExamples/obj-ia32/inscount0.so -o inscount0.log -- /bin/ls
输出结果在inscount0.log文件中
两次结果相同。