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

时间:2023-03-09 12:58:37
Pin学习笔记--安装及一些基本知识

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

一、在windows下安装过程:

1、安装Cygwin

Cygwin安装的时候,默认不安装make工具。需要在这一步的时候,使All后面的字变为install,可以保证所有组件默认安装(当然需要的时间也稍长一些)。也可以只选择make的哪个安装包,测试发现只安装这个包是没有问题的。

2、下载pin,解压

3、设置环境变量cygwin64\bin和pin.exe所在的目录

4、启动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()

PIN_AddForkFunction()

四、其他

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

2、

IPOINT_BEFORE 指令之前,或者函数开始的地方

IPOINT_AFTER 指令之后,或者函数ret的地方

3、在Windows上,如果在一个多线程应用程序运行的工具在回调函数中打开一个文件可以发生死锁。

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

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

6、调试

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