Pin学习笔记--安装及一些基本知识

こ雲淡風輕ζ 提交于 2020-08-12 19:52:53

具体请见用户手册Pin 3.2 User Guide https://software.intel.com/sites/landingpage/pintool/docs/81205/Pin/html/index.html

一、在windows下安装过程:
1、安装Cygwin
Cygwin安装的时候,默认不安装make工具。可以只选择make的那个安装包,测试发现只安装这个包是没有问题的。也可以使All后面的字变为install,安装所有组件(当然需要的时间也稍长一些)。
2、下载pin,解压
3、把cygwin64\bin 和 pin.exe所在的目录 添加到环境变量
4、编译pin提供的例子:




   启动cmd,执行vcvars64.bat,进入pin下的source\tools\ManualExamples目录,make all TARGET=intel64,编译64位dll。
   启动cmd,执行vsvars32.bat,进入pin下的source\tools\ManualExamples目录,make all TARGET=ia32,编译32位dll。

二、三种级别的跟踪
INS_AddInstrumentFunction指令级跟踪INS_InsertCall
TRACE_AddInstrumentFunction 基本快跟踪,可以用来跟踪BBL BBL_InsertCall
IMG_AddInstrumentFunction IMG_AddUnloadFunction 映像跟踪


三、一些函数
RTN_AddInstrumentFunction 函数跟踪 RTN_InsertCall
PIN_AddThreadStartFunction 线程开始
PIN_AddThreadFiniFunction 线程结束
PIN_SafeCopy用于将指定数量的字节从源存储器区域复制到目标存储器区域。 即使源或目标区域无法访问(完全或部分),此功能也可确保安全返回到调用者。
PIN_AddFollowChildProcessFunction()  注册回调函数,回调函数在子进程开始执行前执行 Windows/Linux
PIN_AddForkFunction()  注册回调函数,跟踪父进程或子进程  Linux





四、其他

1、字符串

KNOB<string> KnobOutputFile(KNOB_MODE_WRITEONCE,  "string_family","o", "default_string", "description");
"o"表示命令行参数
pin -t obj-intel64/inscount0.so -o inscount0.log -- /bin/ls

表示把inscount0.log参数传递给KnobOutputFile

2、
IPOINT_BEFORE 指令之前,或者函数开始的地方
IPOINT_AFTER 指令之后,或者函数ret的地方



3、实验中发现,在Windows上,如果在一个多线程应用程序中使用的pin工具,在回调函数中打开文件可能发生死锁,有些函数在回调中使用可能造成程序莫名崩溃。

4、Pin有两种模式,一种是JIT(Just In Time),个人理解为实时编译;另一种是Probe,个人理解为Hook。Probe更快,但是可以使用的Pin相关功能更少。

5、修改程序执行流程INS_InsertDirectJump INS_InsertIndirectJump INS_Delete

6、调试

pin -pause_tool 20 … 开始的时候暂停20秒,这时可以attach

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!