我正在使用 Pintool 来跟踪 malloc/free 操作。从 ManualExamples/malloc_trace.cpp 我能够在示例代码中打印出 malloc/free。
我想知道是否有办法在遇到 malloc/free 的源代码中打印行号。在以下检测 malloc 的 malloctrace.cpp 中,我可以添加任何参数或另一个调用来打印行号。
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 的行号?
// 已编辑
我写了一个新函数
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”函数的正确方法吗?我试过了,它编译得很好,但不打印行号。
谢谢,克