pin tool 各个工具分类及作用: insount0 记录指令执行的次数
inscount 记录指令执行的次数,与inscount0不同的是,它分BBL块记录然后累加
itrace 记录每个指令地址
pinatrace 记录指令读取和写入的内存地址
imageload image载入或卸载时打印一条信息,image指与程序有关的所有数据结构(windows下是dll、exe)
proccount 记录routine的数目和一个routine中指令执行的次数
safecopy 记录程序从内存中复制信息到寄存器的指令
invocation 说明和程序都有点暧昧,暂时没看懂
malloctrace 输出malloc()和free()的输入参数以及malloc()的返回值
下面以malloctrace工具为例对pintool代码进行说明:
前面已经说过,了解pintool的自定义函数是看懂其代码的关键,pintool的主函数可分为三个部分,输出文件建立部分、程序检测函数部分和结尾部分(忽略最后一句)。
输出文件建立部分确定输出文件的格式和说明内容,程序检测函数部分调用各函数对可执行程序进行检测,结尾部分一般为其自定义的Fini函数,用来做将检测数据写入输出文件、关闭文件等的收尾工作。
显然,第二部分是最重要的一部分,从前面声明的函数可知,
IMG_AddInstrumentFunction函数调用Image函数,Image函数的参数为要监测的image,若image中含有malloc函数,则RTN_InsertCall函数一次调用Arg1Bfore和MallocAfter函数,这两个函数实现我们所要的输出,注意前面定义的写入文件的函数,这里是我们想要的输出,InsertCall函数调用这些写入函数,了解这些规律就很容易看懂这些代码。