1

malloc を呼び出す単純なプログラムがあり、メインの実行可能ファイルから malloc へのこの直接呼び出しをキャッチする pintool を開発しようとしています。

SimpleExamples の malloctrace.cpp を使用する (SDK に付属):

VOID Image(IMG img, VOID *v)
{
    RTN mallocRtn = RTN_FindByName(img, MALLOC);
    if (RTN_Valid(mallocRtn))
    {
        RTN_Open(mallocRtn);
        RTN_InsertCall(mallocRtn, IPOINT_BEFORE,(AFUNPTR)Arg1Before, IARG_ADDRINT, MALLOC, IARG_G_ARG0_CALLEE, IARG_END);
        RTN_Close(mallocRtn);
    }
}

私は、自分のコードまたはそれが使用するライブラリによって指向された、多くの malloc 呼び出しをキャッチしています。

objdump を使用すると、malloc の呼び出しが表示されます。

callq  4003b8 <malloc@plt>

これは malloc@plt で始まります。メインの実行可能ファイルのルーチンをブラウズすると、.plt ルーチンが表示されますが、それが malloc に属しているのか、他の外部関数に属しているのかわかりません。

よろしくお願いします。

4

1 に答える 1

0

malloc() 関数を呼び出した人に関する情報を分析コールバックに追加する必要があります。これを行う最も簡単な方法はIARG_RETURN_IP、呼び出しに追加し、RTN_InsertCall()それに応じて Arg1Before を変更することです。

次に、IMG_IsMainExecutable(IMG_FindByAddress(...))Arg1Before のリターン IP で使用して、この呼び出しがメインの実行可能ファイルからのものかどうかを確認できます。

于 2016-11-27T11:59:35.723 に答える