英特尔引脚无法检测memcmp或strcmp



我正在尝试编写一个pintool来分析应用程序中memcmp和strcmp的返回值。首先,我编写了一个例程跟踪工具,它列出了执行的所有例程。我的示例代码非常简单,只是使用memcmp将固定字符串与用户提供的字符串进行比较。然而,我注意到我的pintool从来没有报告memcmp。我也尝试了strcmp,也有同样的问题。

这就是事情变得奇怪的地方。作为完整性检查,我编写了另一个pintool,它可以打印每个图像中的每个例程,甚至是那些没有执行的例程。下面是Image检测的代码:
VOID Image(IMG img, VOID* v)
{
const char* img_name = IMG_Name(img).c_str();
for(SEC sec = IMG_SecHead(img); SEC_Valid(sec); sec = SEC_Next(sec))
{
const char* sec_name = SEC_Name(sec).c_str();
for(RTN rtn = SEC_RtnHead(sec); RTN_Valid(rtn); rtn = RTN_Next(rtn))
{
const char* rtn_name = RTN_Name(rtn).c_str();

printf("%s -- %s -- %sn", img_name, sec_name, rtn_name);
}
}
}

打印出许多例程,如stat,mkdir,memcpy等…但没有memcmpstrcmp!有人知道这是怎么回事吗?

您应该使用IFUNC_SYMBOLS初始化pintools(参见文档SYMBOL_INFO_MODE):

使用:

int main(INT32 argc, CHAR* argv[])
{
if (PIN_Init(argc, argv)) return 0;
PIN_InitSymbolsAlt(SYMBOL_INFO_MODE(UINT32(IFUNC_SYMBOLS) | UINT32(DEBUG_OR_EXPORT_SYMBOLS)));
IMG_AddInstrumentFunction(Image, 0);
PIN_StartProgram();    
return 0;
}

print memcmp &比较字符串

最新更新