我試圖用ReadProcessMemory記錄指向指令,實際上我使用EIP寄存器來獲取下一個指令地址。接下來,我使用distorm lib來顯示助記符。但ReadProcessMemory不讀取任何內容。使用ReadProcessMemory來記錄有針對性的指令
void display_instruction(Debuggee* debuggee)
{
CONTEXT lcContext;
lcContext.ContextFlags = CONTEXT_ALL;
GetThreadContext(debuggee->debugEvent->u.CreateProcessInfo.hThread, &lcContext);
BYTE cInstruction = 0;
DWORD dwReadBytes;
ReadProcessMemory(debuggee->debugEvent->u.CreateProcessInfo.hProcess, (void*)&lcContext.Eip, &cInstruction, 1, &dwReadBytes);
decode((void*)cInstruction); //Distorm Mnemonic
printf("Instruction : 0x%03.3X , %d\n",cInstruction,dwReadBytes);
}
}
我需要你的幫助,請^^
當線程未掛起時,標準錯誤正在使用GetThreadContext(),試圖在32位調試器中訪問64位線程的上下文,並完全忽略這些winapi函數的返回值,找出他們失敗的原因。 –
感謝您的回答。調試器使用陷阱標誌來停止目標執行。我在收到EXCEPTION_SINGLE_STEP時顯示說明。下一條指令不能執行,直到display_instruction沒有完成(我沒有把所有的代碼)。 – nasm