Intel Pin 无法检测到 memcmp 或 strcmp
Intel Pin cannot detect memcmp or strcmp
我正在尝试编写一个分析应用程序中 memcmp 和 strcmp 的 return 值的 pintool。首先,我编写了一个例程跟踪 pintool,其中列出了所有已执行的例程。我的示例代码非常简单,仅使用 memcmp
将固定字符串与用户提供的字符串进行比较。但是,我注意到我的 pintool 从未报告 memcmp
。我也尝试了 strcmp
并遇到了同样的问题。
这里是事情变得奇怪的地方。作为健全性检查,我写了另一个 pintool,据说可以打印每张图像中的每个例程,即使是那些未执行的例程。这是图像检测的代码:
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 -- %s\n", img_name, sec_name, rtn_name);
}
}
}
这会打印出很多例程,例如 stat
、mkdir
、memcpy
等...但没有 memcmp
或 strcmp
!有人知道这里发生了什么吗?
您应该使用 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;
}
打印 memcmp & strcmp
我正在尝试编写一个分析应用程序中 memcmp 和 strcmp 的 return 值的 pintool。首先,我编写了一个例程跟踪 pintool,其中列出了所有已执行的例程。我的示例代码非常简单,仅使用 memcmp
将固定字符串与用户提供的字符串进行比较。但是,我注意到我的 pintool 从未报告 memcmp
。我也尝试了 strcmp
并遇到了同样的问题。
这里是事情变得奇怪的地方。作为健全性检查,我写了另一个 pintool,据说可以打印每张图像中的每个例程,即使是那些未执行的例程。这是图像检测的代码:
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 -- %s\n", img_name, sec_name, rtn_name);
}
}
}
这会打印出很多例程,例如 stat
、mkdir
、memcpy
等...但没有 memcmp
或 strcmp
!有人知道这里发生了什么吗?
您应该使用 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;
}
打印 memcmp & strcmp