본문 바로가기

My Study/Function

WaitForDebugEvent

BOOL WINAPI WaitForDebugEvent(
  __out  LPDEBUG_EVENT lpDebugEvent,
  __in   DWORD dwMilliseconds
);

디버기로부터 Debug event가 발생할 때까지 기다리는 함수
WaitForSingleObject()함수와 비슷하게 동작

lpDebugEvent : 이벤트
dwMilliseconds : 기다리는 시간


DEBUG_EVENT

typedef struct _DEBUG_EVENT {
//9가지 이벤트 종류 중 하나가 세팅, 이벤트 종류에 따라 적절한 (유니온) 멤버가 세팅(INFO 대신 EVENT)
  DWORD dwDebugEventCode;  
  DWORD dwProcessId;
  DWORD dwThreadId;
  union {
    EXCEPTION_DEBUG_INFO  Exception;                          //예외 이벤트 발생 시
    CREATE_THREAD_DEBUG_INFO  CreateThread;
    CREATE_PROCESS_DEBUG_INFO  CreateProcessInfo;  //디버기 프로세스 생성 혹은 attach이벤트 시
    EXIT_THREAD_DEBUG_INFO  ExitThread;
    EXIT_PROCESS_DEBUG_INFO  ExitProcess;                //디버기 프로세스가 종료될 때 발생하는 이벤트 시
    LOAD_DLL_DEBUG_INFO   LoadDll;
    UNLOAD_DLL_DEBUG_INFO  UnloadDll;
    OUTPUT_DEBUG_STRING_INFO  DebugString;
    RIP_INFO RipInfo;
  } u;
} DEBUG_EVENT, *LPDEBUG_EVENT;

예외 이벤트 발생 시 어떠한 예외인지 구분 19가지 ( u.Exception.ExceptionRecord.ExceptionCode )
EXCEPTION_ACCESS_VIOLATION
EXCEPTION_ARRAY_BOUNDS_EXCEEDED
EXCEPTION_BREAKPOINT
EXCEPTION_DATATYPE_MISALIGNMENT
EXCEPTION_FLT_DENORMAL_OPERAND
EXCEPTION_FLT_DIVIDE_BY_ZERO
EXCEPTION_FLT_INEXACT_RESULT
EXCEPTION_FLT_INVALID_OPERATION
EXCEPTION_FLT_OVERFLOW
EXCEPTION_FLT_STACK_CHECK
EXCEPTION_FLT_UNDERFLOW
EXCEPTION_ILLEGAL_INSTRUCTION
EXCEPTION_IN_PAGE_ERROR
EXCEPTION_INT_DIVIDE_BY_ZERO
EXCEPTION_INT_OVERFLOW
EXCEPTION_INVALID_DISPOSITION
EXCEPTION_NONCONTINUABLE_EXCEPTION
EXCEPTION_PRIV_INSTRUCTION
EXCEPTION_SINGLE_STEP
EXCEPTION_STACK_OVERFLOW

'My Study > Function' 카테고리의 다른 글

GetForegroundWindow  (0) 2010.05.02
ContinueDebugEvent  (0) 2010.04.12
DebugActiveProcess  (0) 2010.04.12
CreateRemoteThread  (2) 2010.04.12
VirtualAllocEx  (0) 2010.04.12