理清PIN工具产生的trace文件格式,是BAP下给予PIN进行分析的基础,但网上资料较少,今日研究BAP源代码时,发现一些基本知识,总结如下:
1、PIN生成的trace文件包含一个trace头,接下来是一些列的帧。
strcuct TraceHeader{
uint32_t magic; //trace文件魔术头,0x43525442
uit32_t version; //4
uint64_t frame_count; //此trace文件的帧个数
uint64_t toc_offset; //内容表的位移
}
2、每个帧含有相同的头部结构,包含帧header大小和类型等信息。帧的大小是任意的,×××可以根据帧的大小区分析帧。
包含8中类型的帧:无效、关键帧、标准指令帧、加载模块帧、系统调用帧、污点信息帧、二号标准指令帧、意外帧。
标准帧(stdFrame):可以记录大部分的指令。其包结构如下
地址(4)
线程ID(4)
长度(1)
原始字节(N)
缓存映射(N)
值(N)
关键帧(keyframe):同步执行轨迹,在数百、数千条指令中必须插入一些关键帧,包含两个作用,其一,可以知道当前每个寄存器的值,其二,可以知道当前已经执行了多少条指令。其包结构如下
位置(8)
所有寄存器的值(48)
加载模块帧:记录加载的模块信息。其包结构如下:
XXX
污点信息帧,等同加载模块帧具有相似的结构
3、帧也有可能包含一个内容表(TOC),使用这个可以快速查找特定的帧。TOC表可以通过TraceHeader.toc_offset查到。
转载于:https://blog.51cto.com/upkevin/789303