Study Record

[리버싱] gdb 사용법 본문

리버싱/기본

[리버싱] gdb 사용법

초코초코초코 2021. 11. 12. 14:37
728x90

gcc CMD

gcc -o test1 test.c     : 컴파일해서 파일이름을 test1 으로 한다.

gcc -S test1.as test.c  : 어셈블리어로 컴파일한다.

gcc -g test.c : 바이너리 파일에 표준 디버깅 정보를 포함시킨다.

 

# gdb a.out

# gdb a.out PID 

# gdb a.out core

 

gdb CMD

☞ gdb 종료

(gdb) <CTRL + D>

(gdb) quit

 

☞ 소스 코드 확인(gcc -g 옵션을 포함하여 컴파일한 경우)

(gdb) list

(gdb) list 10   # 10번째줄 코드 출력

(gdb) set listsize=20   # 앞으로 소스 코드를 20줄씩 보여줌 

 

☞ disassemble

(gdb) disassemble <주소/함수명>

(gdb) disassemble main

(gdb) disassemble 0x8048123

 

☞ 프로그램 실행

(gdb) run                  # (== # /bin/level7)

(gbd) run arg1 arg2    # (== # /bin/level7 arg1 arg2)

(gdb) continue           # 다음 브레이크 지점까지 실행, 혹은 실행

 

☞ 브레이크 포인터 걸기

(gdb) break *0x8049000

(gdb) break func

(gdb) break *main+38

 

☞ 브레이크 정보 보기

(gdb) info breakpoints

 

☞ 브레이크 지우기

(gdb) delete      # 전체 지우기

(gdb) delete 1    # 1번 지우기

(gdb) clear [ *main+38 | *0x8049000]

 

☞ 값 보기

- 형식 : x/[출력범위][출력형식] <주소>

x/s <주소>  :  문자열 방식으로 출력

x/x <주소>  : 16진수로 출력

x/4d <주소> : 주소에서 4개를 10진수로 출력

(gdb) x/x 0xbfffed60

(gdb) x/x $ebp

(gdb) x/32x $sep

(gdb) x/10i *main+16

 

☞ 레지스터 값 출력 

(gdb) info registers   # 보통 브레이크를 잡은 상태에서 본다.

(gdb) info all-registers

 

☞ 현재 디버깅하고 있는 프로그램의 함수 리스트

(gdb) info functions

 

☞ 함수 내부로 들어가지 않고 한 라인 실행

(gdb) nexti

 

☞ 함수 내부로 들어가면서 한 라인 실행

(gdb) stepi

 

☞ 도움말 출력

(gdb) help

(gdb) help info

 

☞ 스택 추적 - 주로 개발자분들이 많이 사용

(gdb) backtrace 

 

※ <ENTER> : 특별하지 않는 경우에는 다시 실행

 

☞ 문법 설정하기 (intel vs AT&T)

(gdb) set disassembly-flavor [ att | intel ]

728x90