PinTools学习笔记——安装和入门
Posted milly_Z
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PinTools学习笔记——安装和入门相关的知识,希望对你有一定的参考价值。
介绍性文字就不说了,百度一下有很多,简单来说就是一个输入是可执行文件的动态插桩分析工具。
安装非常简单,不需要编译,直接从官网https://software.intel.com/en-us/articles/pintool-downloads下载、解压即可,PinTools自带很多例子,在source/tools/ManualExamples路径下,参考这些源码对学习PinTools非常有用。
以下内容主要参考官方用户手册以及我在实践中遇到的问题。
写插桩程序简单概括为两个问题:(1)在何处插入什么方法;(2)在插入点执行的方法(Analysis function)
PinTools的插桩粒度可以分为:image(我认为可以理解为输入文件),section(类似于基本块,但PinTools中定义的基本块与平常我们所说的基本块不太一样,不过目前这个不同没有影响到我写程序),routines(函数或方法,function),instruction(语句)
示例(以Linux为例)
到source/tools/ManualExamples目录下执行make可将文件夹内代码文件编译为.so文件,之后按照下述规则键入命令
pin [pin-option]... -t [toolname] [tool-options]... -- [application] [application-option]..
如果程序文件在别的目录下,只要将makefile中的PIN_ROOT设为pin所在路径即可。
以PinTools自带的数语句数目的instrument0.so为例
$ cd source/tools/ManualExamples $ ../../../pin -t obj-ia32/inscount0.so -- /bin/ls
需要注意的是--后一定要空一格再跟[application],否则会报Missing target applicaton的错误
此外还可能遇到
The Operating System configuration prevents Pin from using the default (parent) injection mode.
To resolve this,either execute the following (as root): $ echo 0>/proc/sys/kernel/yama/ptrace_scope # 根据本机路径 Or use the "-injection child" option
我用的第二种
$ ../../../pin -injection child -t obj-ia32/inscount0.so -- /bin/ls
接下来可以根据自己的需要编写工具啦,边写边学,PinTools自己定义的函数、类型什么的特别多,可以多看看官方模块/类说明文档。
PinTools编程有一定模式,大致可以分为三个部分Analysis routines, Instrument routines和Main
以ManualExamples/malloctrace.cpp为例,Analysis routines是你想在插入点做什么,比如那个MallocAfter(ADDRINT ret)会被放在malloc函数返回后,作用是打印malloc函数的返回值;Instrument routines是对插桩函数的描述和固定,经常用到RTN_InsertCall、INS_InsertCall等等,参数是插入点、插入点前后、插入的函数、插入函数的参数列表,就像构造一个函数原型,你的Analysis routines是什么样子的,参数列表里填对应的数据类型和数据就可以;Main主程序,没仔细研究,感觉模式比较固定,就是一些初始化操作、调用插桩函数、启动工具的命令。
今天试着在ManualExamples/malloctrace.cpp的基础上写个监测malloc/free函数和内存访问操作的工具,可是程序陷入死循环了,目前没找到原因,明天打算开始好好看下PinTools在Linux下的调试技巧。
未完待续~
以上是关于PinTools学习笔记——安装和入门的主要内容,如果未能解决你的问题,请参考以下文章