디버거
: 디버깅 프로그램
디버기
: 디버깅 당하는 프로그램
디버거 기능 - 디버기가 올바르게 실행되는지 확인하고 프로그램의 오류를 발견하는것
디버거는 디버기의 명령어를 하나씩 실행할수 있으며, 레지스터와 메모리에 대한 모든 접근권한을 가짐
디버거 프로세스로 등록되면 OS는 디버기에서 디버그 이벤트가 발생할때,
디버기의 실행을 멈추고 해당 이벤트를 디버거에게 통보한다.
디버거는 해당 이벤트에 대해 적절한 처리후 디버기의 실행을 재개할수 있다.
일반적인 예외도 디버그 이벤트에 해당
해당 프로세스가 디버깅 중이 아니었다면 디버그 이벤트는 자체 예외 처리 혹은 OS의 예외 처리 루틴에서 처리
디버거는 디버그 이벤트중에서 처리할수 없거나 관심없는 이벤트들은 OS가 처리하도록 만들어줌
디버그 이벤트 중에서 디버깅에 관련된 이벤트는 EXCEPTION_DEBUG_EVENT이다.
각종 예외 중 디버거가 반드시 처리해야 하는 예외는 EXCEPTION_BREAKPOINT 예외이다.
브레이크 포인트 = BP
= INT3 (어셈블리 명령어) = 0xCC ( IA-32 Instruction )
코드 디버깅 중에 해당 명령어를 만나면, 실행이 중지 되고, 디버거에게 예외 이벤트가 날라간다.
이때 , 디버거는 다양한 작업을 할수 있다.
디버거에서 BP구현하기
BP를 설치하기 원하는 코드의 메모리 시작 주소의 1바이트를 0xCC 로 바꾸면된다.
디버깅을 계속 진행하고 싶을때는 다시 원래값으로 복원시키고 실행하면 된다.
디버그 방식의 API후킹은 이와같은 BP의 특성을 이용하는것이다.
댓글