Record & Replay 에 대한 여러가지 자료들을 이것저것 모아두었다.
여기서 제시한 자료들을 바탕으로 어떻게 Record & Replay 를 접근할 것인가를 판단할 것이다.

브레이크 포인트

'해킹, 파괴의 광학' 이라는 서적에 나온 내용을 그대로 발췌했다.
어떤 원리로 브레이크 포인트가 가능한지 설명한다.
디버깅 하고 싶은 프로세스 함수의 첫 번째 바이트에 브레이크 포인트(OP 코드로 0xCC) 를 집어넣는다.
그리고 그 함수를 실행하면 디버깅 예외로 EXCEPTION_BR EAKPINT 코드를 가진 첫 번째 EXCEPTION_DEBUG_EVENT 예외를 발생시킨다.
아래의 표와 같다.

EXCEPTION_DEBUG_EVENT
CREATE_THREAD_DEBUG_EVENT
CREATE_PROCESS_DEBUG_EVENT
EXIT_THREAD_DEBUG_EVENT
EXIT_PROCESS_DEBUG_EVENT
LOAD_DLL_DEBUG_EVENT
UNLOAD_DLL_DEBUG_EVENT
OUTPUT_DEBUG_STRING_EVENT
RIP_EVENT

물론 실제 함수를 실행시키기 전에 원래 코드로 되돌려 놔야 한다. 그리고 실행한 후에 다시 0xCC 로 돌려 놓아야 브레이크 포인터 이벤트가 발생한다.


한 가지 알아둬야 할 것은 이 이벤트들이 메세지가 아닌 시스템의 예외라는 것이다. 윈도우의 구조적 예외(Structured Execption)는 시스템 자원을 상당히 잡아 먹는다. 또한 이 디버깅 예외가 발생하면 디버깅을 받는 쪽 프로세스 안의 모든 쓰레드는 정지해 버린다. 컴파일러로 디버깅할 때 시스템이 리소스를 엄청나게 차지하며 불안해지는 이유가 여기에 있다.

  • computer/rtcclab/관련기술_동향_및_자료수집.txt
  • Last modified: 3 years ago
  • by likewind