2016-11-25 1 views
1

私はmallocを呼び出す簡単なプログラムを持っていますが、主な実行可能ファイルからこの直接呼び出しをmallocにキャッチするためのpintoolを開発しようとしています。私は多くのmalloc関数呼び出しをキャッチ、両方の自分自身のコードによって、または、それが使用するライブラリによって配向してい主な実行可能ファイルからmalloc呼び出しを特定する方法

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); 
    } 
} 

:SimpleExamples(SDKに付属している)からmalloctrace.cppを使用して

。 objdumpの使用

、私は、malloc関数への呼び出しを参照してください。

callq 4003b8 <[email protected]> 

のmalloc @のPLTから始まります。 メインの実行可能ファイル内でルーチンを参照すると、.pltルーチンが表示されますが、mallocまたはその他の外部関数に属しているかどうかはわかりません。

ご協力いただきありがとうございます。

+0

あなたの質問は何ですか? 'malloc @ pltがmalloc実装に属していますか? 'の場合、答えは「いいえ」です。 'malloc @ plt'は呼び出しを行うバイナリに属します。実行時リンカーによってターゲットが解決されると、**は** libcからmalloc実装を呼び出します。 – Neitsa

+0

私の質問です:どのように私のコードによって直接発生したmalloc呼び出しをキャッチできますか? (多くのmalloc呼び出しとは対照的に、多くの人がlibcなどのコードを助けてくれました) – Jaaz

答えて

0

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

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

+0

ありがとうございました! – Jaaz

関連する問題