如何在pintool中按名称查找RTN?

时间:2015-08-09 10:13:26

标签: intel-pin

我使用RTN_FindByName()来搜索特定的RTN,但它不适用于我,而且我试图强制编译器不内联RTN,但仍然无法正常工作,
测试代码:

void __attribute__ ((noinline)) MyFunInApp() 
{
  printf(" function inside application environmental \n");
}

pintool中的代码:

VOID ImageLoad(IMG img, VOID *v)
 {
   RTN MyRtn = RTN_FindByName(img,"MyFunInApp");
   if (RTN_Valid(MyRtn))
    {
      cout<< "Found RTN"<< endl;
    }
    else
    {
      cout<< "Not Found RTN"<< endl;
    }
}

我如何解决这个问题,或者通过其他方式做到这一点?

编译器:gcc版本4.8
C ++语言
O.S:Ubuntu 14.04 LTS,64位
输出(测试代码):
找不到RTN
找不到RTN
找不到RTN

1 个答案:

答案 0 :(得分:2)

您所看到的(用字符包装的函数名称)称为函数名称修饰/修改。这是C ++本地实现重载的方式。不幸的是,mangling没有标准化,每个编译器都以不同的方式完成。

您可以查找损坏的名称,也可以迭代图像中的rtns(您可以在工具包中看到如何执行此操作的示例)并使用Pin的PIN_UndecorateSymbolName API来获取干净的函数名称。请记住,由于损坏你可能会得到不止一个这样的符号。