본문 바로가기
Security/Reversing

Debugger software BP의 원리

by jino22 2021. 9. 8.

틀린 부분이 있다면 언제든지 댓글 남겨주세요! 


Debugger software BP의 원리

 

- Debugger: 디버깅 하는 프로그램

- Debugging: 프로그램 개발의 마지막 단계에서 프로그램의 오류를 발견하고 원인을 찾는 과정

 

Debugger의 Break Point에는 3가지가 있다.

Software BP, Hardware BP, Memory BP

 

Software Break Point는 CPU 실행을 중단하며, 제한없이 사용할 수 있다.

다만 코드를 변경하게 되므로 코드를 변경하면 안되는 경우 Hardware Break Point를 사용해야 한다. (최대 4개)

 

Debugger가 Debugging중 반드시 처리해야 하는 예외 중에 exception_breakpoint가 있다.

Software BreakPoint(BP)는 어셈블리어로 INT3(0xCC)인데 debugging 중 이 명령어를 만나면 실행이 중지되고 debugger에게 exception_breakpoint 예외 이벤트가 전송된다. 

 

이 원리를 이용하여 debugger 사용시 BP를 걸고 그 부분까지 실행시키는 기능을 사용할 수 있다.

사용자가 BP를 설정하면 debugger는 현재 주소의 OPCODE의 1바이트와 주소를 BP리스트에 저장하고 그 주소의 OPCODE를 INT3(0xCC)로 변경한다.

그러면 그 주소에서 exception_breakpoint 예외가 발생되어 그 주소에 도착하면 멈추게 된다.

 

또한 플래그 레지스터 중 TF 레지스터의 값이 1이 된다. 

TF(Trap Flag)레지스터는 한 번에 하나의 연산만 수행하고디버거에서 중단점을 설정한 곳에서는 1로 설정되는 역할을 한다.

 

다시 진행될 때 debugger는 현재의 EIP값이 BP리스트에 존재하면 이전에 저장해두었던 원래 OPCODE로 되돌린다.


직접 debugging중 BP를 걸어 확인해본다.

debugger에서 helloworld.exe파일을 열어 401536 주소에 BP를 걸었다.

 

ProcessExplorer 프로그램에서 해당 파일을 덤프뜬다.

 

BP걸기 전 해당 주소의 값은 C7 44 24 04 10 40 40 00 이다.

또한 플래그 레지스터 중 TF값이 0이다.

BP걸기 전

 

BP를 걸고 다시 해당 부분을 보면 C7 >> CC 로 OPCODE의 1바이트 값이 변경된 것을 확인할 수 있다. 

또한 플래그 레지스터 중 TF의 값이 1이다.

BP걸고 덤프뜬 상태

* 여기서 덤프뜨고 나서 파일 주소 찾는거 어떻게 하는지 아시는 분 댓글 부탁드립니다 ㅠㅠ

 

즉 debugger에서 BP를 걸었을 때 다음과 같은 두가지 동작을 통해 중단점 역할을 수행한다.

1. 현재 주소의 OPCODE의 1바이트와 주소를 BP리스트에 저장하고 그 주소의 OPCODE를 INT3(0xCC)로 변경

2. TF 레지스터의 값을 1로 변경

 

728x90
반응형

댓글