GDB 사용법
gdb 설치
sudo apt -get install gdb
안되면 sudo apt-get update
gcc -g -o add add.c
gdb 실행
gdb [program]
인텔형 어셈블리어로 보기
(gdb) set disassembly-flavor intel
기본은 AT&T
디스어셈블
(gdb) disassemble [address/symbol]
레지스터 보기
(gdb) info reg: 레지스터 전체 출력
(gdb) info reg [reg]: 특정 레지스터 출력
(gdb) x/x: 16진수로 주소 확인
(gdb) x/x $[reg]: 16진수로 레지스터 값 확인
(gdb) x/t: 2진수로 확인
(gdb) x/o: 8진수로 확인
(gdb) x/d: 10진수로 확인
(gdb) x/u: 부호 없는 10진수로 확인
(gdb) x/x: 16진수로 확인
(gdb) x/c: char로 확인
(gdb) x/f: 부동소수점으로 확인
(gdb) x/s: 스트링으로 확인
bp 설정
(gdb) b *[address/symbol]
(gdb) b *main: 메인 함수 bp
(gdb) b *0x804854d: 특정 주소 bp
bp 제거
(gdb) delete
(gdb) delete [num]
bp 확인
(gdb) info breakpoints
프로그램 실행
(gdb) r [arguments]: 처음부터 실행
(gdb) continue: bp부터 계속 실행
(gdb) step [n]: n번 실행, 기본값은 1
(gdb) ni: 한 스텝 실행, 함수로 들어가지 않음
(gdb) si: 함수를 추적해서 들어감
(gdb) fin: 함수를 끝냄
* gdb는 자동 완성 기능을 제공
disassemble -> disas
breakpoints -> b
이런 식으로 입력해도 문제 x
https://ctf101.org/reverse-engineering/what-is-gdb/