malloc/free 작업을 추적하기 위해 Pintool에서 작업 중입니다. ManualExamples/malloc_trace.cpp에서 샘플 코드에서 malloc/free를 인쇄 할 수있었습니다.Pin을 사용하는 malloc 트레이스의 라인 번호
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에서, I는 RTN 행 번호를 인쇄 할 수있는 기능
string FormatAddress(ADDRINT address, 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"를 사용하는 올바른 방법인가 함수, 나는 이것을 시도했다, 그것은 잘 컴파일하지만 라인 번호를 인쇄하지 않습니다.
감사합니다, K
감사합니다. 편집 된 질문을 참조하십시오. – 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