1. 디버거 좀 더 능숙하게 다루기
1.1 디버거 명령어
아래의 추가적인 디버깅 명령어를 사용해보자
(Code Window에서 동작함)
![](https://blog.kakaocdn.net/dn/sCcBW/btsIfuxnApy/yO5NqLfo2YDheYNSMloqp1/img.jpg)
1.2 베이스 캠프
디버거를 재실행할 때마다 처음(EP 코드)부터 새로 시작하기 때문에 상당히 불편하다. 그래서 중요 포인트(주소)를 지정해 놓은 후 그 포인트로 빠르게 갈 수 있는 방법을 기록한다. 큰 파일을 분석할 때는 시간이 며칠씩 소요되기 때문에 이러한 캠프를 군데군데 잘 설치해두면 아주 편리하게 디버깅 작업을 할 수 있다.
40104F 주소를 베이스캠프로 설정하겠다.
1. Goto 명령
베이스캠프 주소(40104F)를 기억하고 Go to[Ctrl+G] 명령으로 가는 것이다. 그림2.11의 다이얼로그에 40104F 주소를 입력 후 OK 버튼을 누른다.
![](https://blog.kakaocdn.net/dn/mBESi/btsIemfETRq/nlvsWeardVJ7aB3NTh1Yok/img.png)
40104F 주소에 커서가 놓여져 있을것이다. Execute till cursor[F4] 명령으로 그곳까지 실행한다. 이제 여기서부터 디버깅을 진행할 수 있다.
2. BP 설치
베이스캠프로 가는 또 다른 방법은 BP(Break Point)를 설치[F2]하고, 실행[F9]하는 것이다. 가장 편하고 많이 사용되는 방법이다.
![](https://blog.kakaocdn.net/dn/6VMrd/btsIfjicPUi/aoLmMxO40TzaIsX72xEx9K/img.png)
BP를 설치한 주소는 빨갛게 된다.
F9 명령은 현재 실행위치부터 BP가 걸린 곳까지 프로세스를 실행한다. BP가 없다면 끝까지 실행한다.
메인메뉴의 View - Breakpoints를 선택 [ALT+B] 하면 그림 2.13과 같이 Breakpoints 목록이 나타난다.
![](https://blog.kakaocdn.net/dn/96wBf/btsId2aIE0c/6D6D22ux9LGHUKzQXWY9SK/img.png)
목록에서 원하는 Breakpoint를 더블클릭하면, 해당 주소로 간다.
3. 주석
[;] 단축키로 주석(Comment)을 달고, 이 주석을 찾아가는 방법도 있다.
![](https://blog.kakaocdn.net/dn/qFeCV/btsIfx1zvTf/9VpaTfdfp5nuSHSlVryOj0/img.png)
프로그래밍과 마찬가지로 디버깅에서도 주석은 매우 중요하다. 그림 2.14와 같이 중요 코드에 주석을 달아 두면 디버깅하기 매우 수월하다. 커서 위치를 잠시 다른곳으로 옮기고(40104F 이외의 위치에 클릭) 마우스 우클릭 - Search for - User-defined comment 항목을 선택하면 그림 2.15와 같이 상용자가 입력한 주석들이 표시된다.(사용자가 입력한 주석은 OllyDbg 내부에 기억되며 재실행할 때마다 불러들이기 때문에 디버깅할 때 편리하게 이용할 수 있다.)
![](https://blog.kakaocdn.net/dn/diiMwf/btsIfi4GHKT/fJNNKnc7kdCoUaJYrFqEk0/img.png)
온통 빨간색 글씨인것이 커서의 위치이다. 주석 위치와 겹쳐지면 빨간글씨만 나타나기 때문에 커서를 잠시 다른곳에 두라고 한것이다. 해당 주소를 더블클릭하면, 그 주소로 갈 수 있다.
4. 레이블
레이블(Label)은 원하는 주소에 특정 이름을 붙여주는 아주 유용한 기능이다.
40104F 주소를 클릭한 후 단축기 [:]를 이용해 레이블을 입력해보자
![](https://blog.kakaocdn.net/dn/n4nnk/btsIe13bIrc/WbcB1xlzuwhMDX7QIpkpD0/img.png)
이제 40104F 주소를 해당 레이블로 표시한다
![](https://blog.kakaocdn.net/dn/dzXIAz/btsIdOqcDEq/eYSTLCheKap01EdtCwncsK/img.png)
그림2.17은 EP코드를 나타낸다. 처음에는 그냥 주소(40104F)로 표시되었지만 레이블을 붙이게 되면 코드가 매우 직관적으로 변경되어 디버깅할 때 매우 편리하다.
만약 그림처럼 레이블이 표시되지 않는다면 OllyDbg의 옵션 - Debugging option - Disasm에서 'Show symbolic addresses'를 체크해주면 된다.
![](https://blog.kakaocdn.net/dn/znDe4/btsId7XlIOf/Nhd2MPKxq35UghZdml3350/img.png)
레이블도 주석과 마찬가지로 검색이 가능하다. 마우스 우클릭 - Search for - User defined labels 항목을 선택하면 그림 2.19와 같이 사용자가 지정한 레이블이 표시된다. (Initial CPU selection이라고 표시된 부분은 현재 커서 위치를 나타낸다) 주석과 거의 비슷하다.
![](https://blog.kakaocdn.net/dn/L7bXp/btsIfvQesQv/W7kP9EUHWFBKTh7wyuIZiK/img.png)
원하는 레이블을 더블클릭하면 해당 주소로 갈 수 있다. 그 주소를 클릭하고 F4 명령을 하면 그 위치에서부터 디버깅이 가능하다
'TIL(사전캠프)' 카테고리의 다른 글
리액티브. (2024-06-28) (0) | 2024.06.28 |
---|---|
리액티브. (2024-06-27) (0) | 2024.06.27 |
리액티브 스트림즈(2024-06-26) (0) | 2024.06.26 |
리액티브 스트림즈(Reactive Streams) (2024-06-25) (0) | 2024.06.25 |
1. 리액티브 시스템과 리액티브 프로그래밍 (2024-06-25) (0) | 2024.06.25 |