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
__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 |