我正在使用Intel Pin编写分析器。通过在每个例程之前和之后添加检测代码,工具配置文件在可执行文件中起作用。对于每个例程,我在 Pin 中添加回调,如下所示
RTN_InsertCall(routine, IPOINT_BEFORE, (AFUNPTR)BeforeCall,
IARG_UINT32, RTN_Id(routine),
IARG_THREAD_ID,
IARG_END);
RTN_InsertCall(routine, IPOINT_AFTER, (AFUNPTR)AfterCall,
IARG_UINT32, RTN_Id(routine),
IARG_THREAD_ID,
IARG_END);
BeforeCall 和 AfterCall 看起来像
VOID BeforeCall(unsigned int funcID,THREADID threadID);
VOID AfterCall(unsigned int funcID,THREADID threadID);
这些回调中的“ threadID ”变量的值始终为零。被检测的应用程序有32 个线程正在运行。Pin 附带的示例使用相同的方法来访问线程 ID。这个实现对吗?如果没有,我如何获取运行例程的线程的实际线程 ID?