핀 도구를 사용하여 다른 루틴에서 스택을 인쇄하려고합니다. 모든 루틴을 가져올 수 있지만 그 루틴 스택에있는 레지스터에 저장된 주소를 얻는 방법에 대해서는 약간 혼란 스럽습니다.핀 도구를 사용하여 스택에서 레지스터의 값을 인쇄하려고합니다.
는 내가 가지고있는 것은 이것이다 :
VOID SETRTN_CONTEXT(CONTEXT * ctxt)
{
ADDRINT reg_address;
PIN_SaveContext(ctxt, &m_ctxt);
reg_address = PIN_GetContextReg(&m_ctxt, REG_STACK_PTR);
}
다른 기능에 내가 그 기능을 호출하는 코드의이 작품이
:for(rtn = SEC_RtnHead(sec); RTN_Valid(rtn); rtn = RTN_Next(rtn))
{
RTN_Open(rtn);
RTN_InsertCall(rtn, IPOINT_BEFORE, (AFUNPTR)SETRTN_CONTEXT,
IARG_CONST_CONTEXT, IARG_THREAD_ID, IARG_END);
RTN_Close(rtn);
}
내가 때 루틴 호출에 조금 혼란 스러워요을 그 함수는 단지 하나의 결과를 얻고 있기 때문에 Pin을 붙이고 2 초를 기다린 후에 얻습니다.
저에게 도움이 될만한 핀 머리가 있습니까? 나는 레지스터를 얻기 위해 루틴에서 컨텍스트가 필요하지만 오브젝트로서 컨텍스트를 반환하는 함수를 찾을 수 없다는 것을 이해합니다 ...
이것은 사용중인 핀 도구에 따라 다릅니다. 설명서를 보았습니까? 나는 [this] (http://www.cs.virginia.edu/kim/publicity/pin/docs/39599/Pin/html/index.html)이 그것이라고 믿는다. –
사용자 모드 디버거를 사용하지 않는 이유는 무엇입니까? –
예 전 문서를 다 읽고 도움이되는 것이 없습니다. 그것은 너무 구체적이지 않습니다.이 코드에서 사용되는 모든 함수는 Pin API에서 가져온 것으로 모든 결과가 전혀 나오지 않습니다 .. @ slavik262 – attis