본문 바로가기
Security/Windows System

※Debug관련 API

by Winduck 2018. 3. 2.
반응형
개인적인 프로젝트를 진행하며 알게된 사실을 정리합니다.

WaitForDebugEvent?
- 디버기 프로세스에서 DebugEvent가 발생할때까지 기다림. 함수형태는 다음과 같습니다.
BOOL WINAPI WaitForDebugEvent(
  _Out_ LPDEBUG_EVENT lpDebugEvent, //발생되는 이벤트는 이곳으로 나옴.
  _In_  DWORD         dwMilliseconds // 기다리는 시간.
);


- lpDebugEvent : 디버기이벤트 발생시 저장되는 이벤트데이터구조체


typedef struct _DEBUG_EVENT {
  DWORD dwDebugEventCode;
  DWORD dwProcessId;
  DWORD dwThreadId;
 
union {
    EXCEPTION_DEBUG_INFO      Exception; //예외처리시
    CREATE_THREAD_DEBUG_INFO  CreateThread; // Thread생성시
    CREATE_PROCESS_DEBUG_INFO CreateProcessInfo; //프로세스 생성시
    EXIT_THREAD_DEBUG_INFO    ExitThread; // Thread종료시
    EXIT_PROCESS_DEBUG_INFO   ExitProcess; // 프로세스 종료시
    LOAD_DLL_DEBUG_INFO       LoadDll; //DLL로드시
    UNLOAD_DLL_DEBUG_INFO     UnloadDll; //DLL 언로드시
    OUTPUT_DEBUG_STRING_INFO  DebugString; //OUTPUT_DEBUG_STRING API 호출시
    RIP_INFO                  RipInfo; // 디버거 프로세스의 통제와 관계없이 종료되었을 시
  } u;
} DEBUG_EVENT, *LPDEBUG_EVENT;
 


- dwMilliseconds : 기다리는시간



ContinueDebugEvent란?
- WaitForDebugEvent로 멈춰진 디버기 프로세스의 Thread를 다음 동작을 하도록 지시함.

BOOL WINAPI ContinueDebugEvent(
  _In_ DWORD dwProcessId, //pid
  _In_ DWORD dwThreadId, //tid
  _In_ DWORD dwContinueStatus //처리할 방법
);

- dwProcessId : pid
- dwThreadId : tid
- dwContinueStatus : 처리할 방법은 다음의 표와 같습니다.

 dwContinueStatus

설명 

 DBG_CONTINUE

  0x00010002L

  EXCEPTION_DEBUG_EVENT발생시 디버거에서 직접 예외를 처리

 DBG_EXCEPTION_NOT_HANDLED

  0x80010001L

 EXCEPTION_DEBUG_EVENT발생시 대상프로세스에 설정된 예외처리 루틴을 실행

 DBG_REPLY_LATER

  0x40010001L

 Windows 10, version 1507 이상에서 추가된 루틴 //추후 설명...




반응형

'Security > Windows System' 카테고리의 다른 글

64 Windows커널 진입 차이 : 유저모드편  (0) 2018.04.12
kernel32 vs kernelbase  (0) 2018.04.05
IO_STACK_LOCATION란?  (0) 2018.02.03
※CONTEXT 정리  (0) 2017.12.06
※SEH(Structed Exception Handler)란?  (0) 2017.08.23

댓글