Я работаю над Pintool для отслеживания операций malloc/free. Из ManualExamples/malloc_trace.cpp я смог распечатать malloc/free в образце кода.
Мне было интересно, есть ли способ напечатать номера строк в исходном коде, где встречается 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?
// ОТРЕДАКТИРОВАНО
Я написал новую функцию
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», я пробовал это, он отлично компилируется, но не печатает номера строк.
Спасибо, К