典型的 PIN 码片段如下所示(取自官方手册):
// This function is called before every instruction is executed
// and prints the IP
VOID printip(VOID *ip) { fprintf(trace, "%p\n", ip); }
// Pin calls this function every time a new instruction is encountered
VOID Instruction(INS ins, VOID *v)
{
// Insert a call to printip before every instruction, and pass it the IP
INS_InsertCall(ins, IPOINT_BEFORE, (AFUNPTR)printip, IARG_INST_PTR, IARG_END);
}
我只是不知道如何ins
从printip(VOID *p)
. 反过来似乎很容易,即从ins
对象获取 IP :
INS_Address (INS ins)
(见这里)
我尝试通过传递一个INS *ins
指向printip(VOID *ip, INS *ins)
ins的指针,IARG_PTR, &ins
但这以转换错误或分段错误告终。
如何从分析函数内部访问ins
对象(类型INS
)?
旁注:我在尝试调用INS_Disassemble (INS ins)
每个执行的指令时遇到了这个问题。