我试图使用引脚工具在不同例程中打印出堆栈。我能够获得所有的例程,但是我对如何获取存储在该例程堆栈中的寄存器中的地址有些困惑。尝试使用引脚工具从堆栈中打印寄存器的值
什么我已经是这样的:
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附加并等待几秒钟后得到它。
任何可能帮助我在这一个pinheads?我明白,我需要从常规情况下,为了得到寄存器,但我无法找到返回上下文对象的函数...
这似乎特定于您正在使用的针工具。你有没有试过查看它的文档?我相信[this](http://www.cs.virginia.edu/kim/publicity/pin/docs/39599/Pin/html/index.html)就是这样。 –
为什么不使用用户模式调试器? –
是的,我完成了他们的文档,找不到任何有用的东西。这不是太具体 - 在这段代码中使用的所有函数都来自Pin API,我只是没有得到任何结果。@ slavik262 – attis