我試圖使用引腳工具在不同例程中打印出堆棧。我能夠獲得所有的例程,但是我對如何獲取存儲在該例程堆棧中的寄存器中的地址有些困惑。嘗試使用引腳工具從堆棧中打印寄存器的值
什麼我已經是這樣的:
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