[C++] как написать простой отладчик
я хочу установить аппаратную точку останова для адреса в памяти без использования функции CreateProcess
Что я уже пробовал:
ps: этот код работает нормально
bool dwResult; STARTUPINFO sinfo; DEBUG_EVENT DebugEvent; memset(&sinfo, 0, sizeof(sinfo)); dwResult = CreateProcess("MainWindow.exe", 0, 0, 0, false, DEBUG_PROCESS|DEBUG_ONLY_THIS_PROCESS, 0, 0, &sinfo, &pinfo); if (dwResult) { while (dwResult) { WaitForDebugEvent(&DebugEvent, INFINITE); DWORD EventCode = DebugEvent.dwDebugEventCode; DWORD ExceptionCode = DebugEvent.u.Exception.ExceptionRecord.ExceptionCode; switch (EventCode) { case EXIT_PROCESS_DEBUG_EVENT: { dwResult = false; continue; }; case CREATE_PROCESS_DEBUG_EVENT: { HANDLE Thread = OpenThread(THREAD_ALL_ACCESS, false, DebugEvent.dwThreadId); SetHWBP(Thread, 0x00E5254C, HWBP_EXECUTE, HWBP_BYTE, 0); // to sniff serial CloseHandle(Thread); }; case EXCEPTION_DEBUG_EVENT: { if (EXCEPTION_SINGLE_STEP == ExceptionCode) { HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, false, DebugEvent.dwThreadId); if (hThread) { CONTEXT context = {CONTEXT_ALL|CONTEXT_DEBUG_REGISTERS|CONTEXT_CONTROL}; if (GetThreadContext(hThread, &context)) { if ((context.Dr6 & (1 << 0))) { DoSomething(&context); //execute after doing the HWBP RemoveHWBP(hThread, 0); } }; CloseHandle(hThread); }; }; }; }; dwResult = ContinueDebugEvent(DebugEvent.dwProcessId, DebugEvent.dwThreadId, DBG_CONTINUE); }; CloseHandle(pinfo.hProcess); CloseHandle(pinfo.hThread); }; //system("pause"); return false;
Richard MacCutchan
Так в чем же вопрос?
Member 10852608
я хочу установить аппаратную точку останова для адреса в процессе без использования функции CreateProcess, потому что я не хочу запускать процесс из своего отладчика , я просто хочу получить к нему дескриптор и установить HWBP для адреса
Richard MacCutchan
У вас есть комментарий выше, который гласит: "этот код отлично работает" Однако если адрес, на который вы ссылаетесь, находится за пределами адресного пространства вашего приложения, он завершится ошибкой с незаконным исключением адреса.
Кроме того, я не могу найти никаких ссылок на функцию SetHWBP; где она определена?
Member 10852608
не беспокойтесь об адресе он статичен
к сожалению вот вам и весь источник
http://rgho.st/74Pp4SdMd