您可以使用硬件斷點調試進程。
實施例使用WINAPI:
DWORD address = 0x12345678; // address of the instruction after the call
DebugActiveProcess(pid); // PID of target process
CONTEXT ctx = {0};
ctx.ContextFlags = CONTEXT_DEBUG_REGISTERS | CONTEXT_INTEGER;
ctx.Dr0 = address;
ctx.Dr7 = 0x00000001;
SetThreadContext(hThread, &ctx); // hThread with enough permissions
DEBUG_EVENT dbgEvent;
while (true)
{
if (WaitForDebugEvent(&dbgEvent, INFINITE) == 0)
break;
if (dbgEvent.dwDebugEventCode == EXCEPTION_DEBUG_EVENT &&
dbgEvent.u.Exception.ExceptionRecord.ExceptionCode == EXCEPTION_SINGLE_STEP)
{
if (dbgEvent.u.Exception.ExceptionRecord.ExceptionAddress == (LPVOID)address)
{
GetThreadContext(hThread, &ctx);
DWORD eax = ctx.Eax; // eax get
}
}
ContinueDebugEvent(dbgEvent.dwProcessId, dbgEvent.dwThreadId, DBG_CONTINUE);
}
它使用調試器是可能的。 – Lol4t0 2013-05-10 21:15:10
您可以在該位置放置一個硬件斷點。 – Matthew 2013-05-10 21:16:44
更好的方法是修改其他進程,以便更乾淨地鉤住它。例如,您可能有一個註冊的調用,該調用在調用將值傳遞給調出的函數後進行。這種低級別的駭客往往非常脆弱。 – 2013-05-10 22:01:22