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学习笔记——安装和入门的主要内容,如果未能解决你的问题,请参考以下文章

Unity Shader入门精要学习笔记 - 第5章 开始 Unity Shader 学习之旅

Jsp入门EL表达式_学习笔记

学习笔记:python3,代码片段(2017)

强化学习笔记:Gym入门--从安装到第一个完整的代码示例

Vuejs入门-----安装+基本语法学习笔记

MongoDB 学习笔记之 入门安装和配置