典型的 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)每个执行的指令时遇到了这个问题。