1

RTN_FindByName() を使用して特定の RTN を検索しましたが、うまくいきませんでした。さらに、コンパイラに RTN をインライン化しないように強制しようとしましたが、まだ機能していません
。コードをテストします。

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

ピンツールのコード:

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++ 言語
OS: Ubuntu 14.04 LTS、64 ビット
(テスト コードの) 出力:
Not Found RTN
Not Found RTN
Not Found RTN

4

1 に答える 1

2

表示されているもの (文字で囲まれた関数名) は、関数名の装飾/マングリングと呼ばれます。これは、C++ がオーバーロードをネイティブに実装する方法です。残念ながらマングリングは標準化されておらず、すべてのコンパイラが異なる方法でマングリングを行っています。

マングルされた名前を探すか、代わりに画像内の rtns を反復処理し (これを行う方法についてはキットのサンプルを参照できます)、Pin の PIN_UndecorateSymbolName API を使用してクリーンな関数名を取得できます。マングリングにより、そのようなシンボルが複数得られる可能性があることを覚えておいてください。

于 2015-08-11T13:08:44.483 に答える