我正在使用Pintool來跟蹤malloc/free操作。從ManualExamples/malloc_trace.cpp中,我可以在示例代碼中打印出malloc/free。使用Pin的malloc跟蹤中的行號
我想知道是否有辦法在遇到malloc/free的源代碼中打印行號。在以下malloctrace.cpp中插入malloc,我可以添加任何參數或另一個調用來打印行號。
if (RTN_Valid(mallocRtn))
{
RTN_Open(mallocRtn);
// Instrument malloc() to print the input argument value and the return value.
RTN_InsertCall(mallocRtn, IPOINT_BEFORE, (AFUNPTR)Arg1Before,
IARG_ADDRINT, MALLOC,
IARG_FUNCARG_ENTRYPOINT_VALUE, 0, IARG_END);
RTN_InsertCall(mallocRtn, IPOINT_AFTER, (AFUNPTR)MallocAfter,
IARG_FUNCRET_EXITPOINT_VALUE, IARG_END);
RTN_Close(mallocRtn);
}
在DebugTrace.cpp,我看到有一個功能
string FormatAddress(ADDRINT address, RTN rtn)
,可以打印了RTN的行號。有沒有辦法使用這個函數來獲取malloc的行號?
// EDITED
我寫了一個新的功能
VOID printline(ADDRINT instr_ptr)
{
// get source line
INT32 line;
string file,s ;
PIN_LockClient();
LEVEL_PINCLIENT::PIN_GetSourceLocation(instr_ptr, NULL, &line, &file);
PIN_UnlockClient();
if (file != "")
{
TraceFile << file << " " << decstr(line) << endl;
}
}
,我在我的主要功能
RTN_InsertCall(mallocRtn, IPOINT_BEFORE, (AFUNPTR)printline,
IARG_INST_PTR, IARG_END);
調用這是使用 「GetSourceLocation」 的正確方法函數,我試過了,它編譯得很好,但不打印行號。
感謝, ķ
謝謝,請參閱編輯的問題。 – marc
我一直在以這種方式嘗試使用IARG_RETURN_IP,它不起作用,這是正確的方式嗎? RTN_InsertCall(mallocRtn,IPOINT_AFTER,(AFUNPTR)printline, IARG_ADDRINT,IARG_RETURN_IP, IARG_FUNCRET_EXITPOINT_VALUE, IARG_END); – marc
1.嘗試使用IPOINT_BEFORE 2.您似乎沒有正確使用IARG。我推薦在引腳工具包中搜索示例之後,創建另一個關於使用IARG的問題。 – nitzanms