본문 바로가기

Learning/└◆Reversing

[과제] gdb(디버거) 사용법


gdb(디버거) 사용법에 대한 조사.


 

[시스템 해킹] gdb(디버거) 사용방법

GDB?

GDB는 GNU Debugger의 약자로 Console debugger이다. 먼저 디버깅을 수행하기 위해서는 소스코드를 컴파일할 때

디버깅 정보를 포함하도록 해야한다. gcc에서 이에 해당하는 옵션은 -g 이다.

 

Windows

- OllyDBG

Linux

- GDB

 

사용방법

ㄱ)

$ gdb a.out (gdb -q a.out)

따로 설정 하지 않으면 AT&T기반의 소스코드 사용

(gdb) set dis intel

Intel 기반으로 변경 가능

 

ㄴ)

(gdb) disassemble main

메인함수 검색

(gdb) break *주소값

Break Point 설정

(gdb) delete 번호

B.P 삭제

 

ㄷ)

(gdb) Run

프로그램 실행(자동으로 첫 번째 B.P에 멈춘다)

(gdb) continue

이어서 실행

 

ㄹ)

(gdb) info breakpoints

설정 되어 있는 B.P 확인

(gdb) info registers

레지스터에 저장된 값 확인

 

ㅁ)

(gdb) x/d

(gdb) x/x

(gdb) x/s

해당 주소값에 들어있는 값을 원하는 타입으로 출력

 

gdb 실행상황에서 1은 소스를 출력해주는 명령이다. Enter를치면 다음 라인의 소스가 출력이 된다.

 1

main 함수를 기점으로 소스 출력 

1 10 

10 행을 기준으로 출력 

1 func 

func 함수의 소스를 출력 

1 - 

출력된 행의 이전 행을 출력 

1 file.c:func 

file.c 파일의 func 함수 부분을 출력 

1 file.c:10 

file.c 파일의 10행을 기준으로 출력 

set listsize 20 

출력 행이 10행에서 20행으로 증가 

 

BreakPoint 명령

 b func

func 심볼의 시작 부분에 BreakPoint 설정 

b 10 

10 행에 BreakPoint 설정 

b file.c:func 

file.c 파일의 func Symbol에 BreakPoint 설정 

b file.c:10 

file.c 파일의 10행에 BreakPoint 설정 

b +2 

현재 행에서 2개 행 이후 지점에 BreakPoint 설정 

b -2 

현재 행에서 2개 행 이전 지점에 BreakPoint 설정 

b *0x8049000 

0x8049000 주소에 BreakPoint 설정(Assembly로 디버깅시 사용)

b 10 if var == 0

10행에 BreakPoint를 설정하는데, var변수의 값이 0일 때 작동  

rb fun* 

*fun* 에 해당하는 모든 Symbol에 BreakPoint 설정 

rb ^fun 

fun으로 시작하는 모든 Symbol에 BreakPoint 설정 

rb TestClass:: 

TestClass에 해당하는 모든 Symbol에 BreakPoint 설정 

 

c1 func

func 함수의 시작 부분에 BreakPoint 제거 

c1 10 

10 행의  BreakPoint 제거 

c1 file.c:func 

file.c 파일의 func 함수에 BreakPoint 제거 

c1 file.c:10 

file.c 파일의 10행에 있는 BreakPoint 제거 

모든 BreakPoint 제거 

disable br 

모든 BreakPoint 비활성화 

disable br 1 3 

1번, 3번 BreakPoint 비활성화 

enable br 

모든 BreakPoint 활성화 

enable br once 1 

1번 BreakPoint 활성화 하고, 한 번만 걸리고 비활성화 설정 

enable br delete 1 

1번 BreakPoint 활성화하고, 한 번만 걸리고 제거 

 

Information

 명령

설명 

i b 

등록된 BreakPoints와 watchpoints를 출력 

i line 

현재 디버깅하고 있는 위치 정보를 출력 

i program 

현재 프로그램의 process 정보를 출력 

i args 

현재 함수로 넘어온 인자의 정보를 출력 

i locals 

현재 함수의 지역 변수를 출력 

 

프로그램에 인자를 넣고 실행 & 종료

 r

프로그램 실행 

 r arg1 arg2

arg1과 arg2를 인자로 프로그램 실행 

 k

 프로그램 실행 종료