2016-11-25 29 views
1

確定的malloc調用我有一個簡單的程序,調用malloc,而我試圖建立一個pintool趕上從主可執行文件的malloc這直接調用。如何從主可執行

運用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 <[email protected]> 

與malloc分配@ PLT開始。 瀏覽我的主要可執行文件中的例程我看到一個.plt例程,但我不知道它是否屬於malloc或任何其他外部函數。

我很欣賞你的幫助。

+0

什麼是你的問題?如果它是否「malloc @ plt屬於malloc實現?」,答案是否定的。 'malloc @ plt'屬於撥打電話的二進制文件。一旦目標被運行時鏈接程序解析,它就會從libc調用malloc實現。 – Neitsa

+0

我的問題是:我如何捕獲由我的代碼直接產生的malloc調用? (而不是所有的malloc調用,其中許多來自協助代碼,如libc等) – Jaaz

回答

0

您需要將信息添加到您的分析的回調對誰叫的malloc()函數。最簡單的方法是將IARG_RETURN_IP添加到您的RTN_InsertCall()調用中,並相應地更改Arg1Before。

然後,您可以使用IMG_IsMainExecutable(IMG_FindByAddress(...))在Arg1Before返回IP,看看這個電話來自主可執行文件來了。

+0

感謝您的有用評論! – Jaaz