본문으로 바로가기


디버거란?


다른 대상 프로그램을 테스트하고 디버그하는데 쓰이는 컴퓨터 프로그램이다.




디버그란?


컴퓨터 프로그램의 정확성이나 논리적인 오류(버그)를 찾아내는 테스트 과정





즉, 디버거는 버그를 찾아내는 테스트를 수행하는데 사용하는 프로그램이다.





디버거에는 다양한 종류가 있지만 올리디버거를 사용할 예정이다


올리디버거는 가볍고 빠르며 무료인 디버거임에도 다양한 기능과 옵션이 있다


올리디버거를 사용한 강좌가 많아 초보자가 사용하기 좋다보니 가장 인기있는 디버거로 평가된다.





올리디버거를 실행하면 다음과 같은 화면이 나온다.



굉장히 간지난다.



이제 나누어져있는 화면이 각자 무엇을 뜻하는지 알아보자




좌측 상단의 화면이다


Code Window라고 무르며 어셈블리코드가 나온다.


화면 좌측에 보이는 검은색으로 칠해져있는 숫자와 해당 열은 메모리 주소를 뜻하며 명령어가 실행될 주소와 매칭되어있다


그 오른쪽에 있는 알수없는 숫자(ex 55)가 있는 칸은 OP코드(명령코드, 기계어의 일부)를 보여준다


화면의 중앙에 있는 여러 명령으로 된 창이 디스어셈블리창이며 기계어를 어셈블리어로 바꿔놓은 창이다


그 오른쪽에 공백이 많이 보이는 칸은 좌측의 내용들을 분석하여 보기좋게 정리한 내용들이다

아래에 있는 기다란 칸은 변수값을 출력하는 칸이다


주요한 변수들에 어떤값들이 들어갔는지 표시해주는 창이다




주소, OP코드, 어셈블리어, COMMENT 순서로 되어있다.






화면의 우측 상단의 화면이다


Register Window라고하는 창이며 레지스터와 각종 플래그 값들을 실시간으로 보여준다





화면의 좌측 하단의 화면이다


Dump Window라고 부르며  프로세스 내의 원하는 메모리주소에 담긴 값을 Hex와 ASCII를 통해 표시한 창이다


주소, Hex, ASCII 순서로 이루어져있다.





화면의 우측 하단의 화면이다


Stack Window라고 하며 ESP레지스터가 가리키는 프로세스 스택메모리를 실시간으로 표시한다


스택주소, 스택값, COMMENT순서로 이루어져있다.







기본적인 창 구성에 대해서는 알아보았다


이제 세부적인 기능들을 알아보자


우선 어떤 단축키가 있는지 알아보자





F2


브레이크포인트 설정/해제



ctrl + F2


프로그램 리셋



alt + F2


프로그램 닫기



F3


열기



F5


윈도우 최대화



alt + F5


올리디버거를 Topmost Window로 만들기

올리디버거가 항상 최상위 프로그램이 된다



F7


step into

단일명령을 실행한다



F8


step over

단일명령을 실행하되 함수호출은 한번에 실행한다.



F9


프로그램 진행



ctrl + F9


RETN 명령이 나올때까지 실행



alt + B


브레이크포인트창을 연다

한번에 관리할 수 있다



alt + C


CPU창을 연다



alt + E


모듈들의 리스트를 연다



alt + K


Call 스택윈도우를 연다



alt + L


로그창을 연다



alt + M


메모리창을 연다



ctrl + G


원하는 주소를 찾아간다



F4


선택위치까지 실행



;


COMMENT 추가






이번에는 우클릭시 나오는 기능들에 대해 알아보자



Code Window에서 우클릭시 나오는 메뉴들이다


Backup

- Create backup : 백업파일 생성

- Load backup from file ... : 백업파일 로드


Edit

- Copy as table : 선택영역 복사(테이블 형식으로)

- Copy address : 선택영역 주소 복사(한개만)


Add label ..

라벨을 추가할 수 있고,, 단축키는 콜론(:)이다


 Assemble ...

어셈블리어 수정을 할 수 있고, 더블클릭을 하면 띄울 수 있다


New origin here

EIP의 값을 선택한 명령라인의 주소로 바꾼다


Follow in Dump

- Memory Address : 현재 주소를 아래의 덤프에서 보여준다

- Immediate constants : 명령어의 상수값이 나타내는 위치를 덤프에서 보여준다

- Selection : 현재 명령의 위치를 덤프 패널에서 보여준다


Search for

- Names : 존재하는 모든 name들을 보여준다

- Command : 명령어 검색

- Constant : 상수검색

- Binary string : 문자열 검색

- All intermodular calls : import된 함수의 목록들 본다

- All commands : 찾는 명령어의 목록을 보여준다

- All modifications : 모든 수정 사항들을 보여준다

- All referenced strings : 모든 문자열을 보여준다

- All user comments : 사용자설정된 모든 주석을 보여준다


Find references to

- Select command : 역참조, 현재위치를 호출하는곳을 알려준다





'Study > reversing' 카테고리의 다른 글

레지스터에 대해 알아보자  (0) 2017.08.21
어셈블리어에 대해 알아보자  (0) 2017.08.21
리버싱에 대해 알아보자  (0) 2017.08.19
리턴코드 분석  (0) 2017.06.16
어셈블리어 기본명령어  (0) 2017.04.11