Hi,
ich hätt nur mal ne kleine Verständnissfrage, da ich mir die nicht selbst auf google klären kann...
wenn ich hardware breakpoints setze, und diese dann ausgelöst werden, wie wird darauf reagiert?
-- Edit: okay :| http://www.codeproject.com/KB/debug/hardwarebreakpoint.aspx -- bissel runterscrollen und nicht zum dritten mal überlesen klärt das,
aber wie wird auf die exception reagiert?
-- und wie lokalisiert man die exception handler in assembler
( da ergeben sich ne menge fragen xD )
-- die fragen hätten sich damit erledigt <3, exception filter also.. *nod*
http://www.mpcforum.com/showthread.php?t=183541
ich würds für die wiki vorschlagen, interessiert sicherlich nicht nur mich !
--edit
( wer hätts gedacht !? )
ich habs zwar schon im cpp forum gepostet, bin hier aber glaube ich besser aufgehoben damit,
mein problem dabei ist das er anscheinend die eip änderungen komplett ignoriert da er eine dauerschleife auf funktion 1 bildet.
ich hätt nur mal ne kleine Verständnissfrage, da ich mir die nicht selbst auf google klären kann...
wenn ich hardware breakpoints setze, und diese dann ausgelöst werden, wie wird darauf reagiert?
-- Edit: okay :| http://www.codeproject.com/KB/debug/hardwarebreakpoint.aspx -- bissel runterscrollen und nicht zum dritten mal überlesen klärt das,
aber wie wird auf die exception reagiert?
-- und wie lokalisiert man die exception handler in assembler

-- die fragen hätten sich damit erledigt <3, exception filter also.. *nod*
http://www.mpcforum.com/showthread.php?t=183541
ich würds für die wiki vorschlagen, interessiert sicherlich nicht nur mich !
--edit

ich habs zwar schon im cpp forum gepostet, bin hier aber glaube ich besser aufgehoben damit,
Code:
#include <iostream>
#include <Windows.h>
using namespace std;
void Function1(){
cout << "Something\n";
}
void Function2(){
cout << "Different\n";
}
void Detoured(){
cout << "Detoured\n";
}
LONG WINAPI MyUnhandlerExceptionFilter(EXCEPTION_POINTERS* pExceptionInfo)
{
if(pExceptionInfo->ExceptionRecord->ExceptionCode!=EXCEPTION_SINGLE_STEP)
{
return EXCEPTION_CONTINUE_SEARCH;
}
if(pExceptionInfo->ExceptionRecord->ExceptionAddress==Function1)
{
cout << "Broken at f1\n";
pExceptionInfo->ContextRecord->Eip = reinterpret_cast < unsigned long >(Detoured);
return EXCEPTION_CONTINUE_EXECUTION;
}
return EXCEPTION_CONTINUE_SEARCH;
}
DWORD WINAPI ThreadProcc( LPVOID lpParameter ){
PVOID pHandler = AddVectoredExceptionHandler(0xDEADBEEF,MyUnhandlerExceptionFilter);
CONTEXT Context;
Context.ContextFlags = CONTEXT_DEBUG_REGISTERS;
GetThreadContext(GetCurrentThread(), &Context);
Context.Dr0=reinterpret_cast<DWORD>(Function1);
Context.Dr1=reinterpret_cast<DWORD>(Function2);
Context.Dr7=(1<<0)|(1<<2);
SetThreadContext(GetCurrentThread(), &Context);
Function1();
Function2();
RemoveVectoredExceptionHandler(pHandler);
return 0;
}
int main(int argc, char* argv[])
{
DWORD ID;
HANDLE hThread = CreateThread(NULL,0,ThreadProcc,NULL,0,&ID);
WaitForSingleObject(hThread,INFINITE);
return 0;
}
//---------------------------------------------------------------------------
mein problem dabei ist das er anscheinend die eip änderungen komplett ignoriert da er eine dauerschleife auf funktion 1 bildet.
Zuletzt bearbeitet: