-
gdb 명령어System hacking training/Knowledge 2018. 2. 13. 21:56
gdb -q [binary] gdb 조용히 켜기
run (r) 바이너리 실행
continue (c) 다음 bp 까지 실행
quit (q) 바이너리 종료
disas [function name] 특정함수의 어셈블리 코드 출력
info [function] 함수의 정보를 출력
[break] bp(break point)의 정보 출력
[register] register의 정보 출력
info break 했을 때 bp정보가 보이는데, 이중
delete (del) 모든 bp 제거
delete (del) [number] 특정 bp 제거
info function 할때는 바이너리 시작 전에 해야한다. -> 공유라이브러리까지 모두 출력하기 때문(지저분)
break (b) function 함수에 bp를 건다.
함수 프롤로그를 skip 한다.
b * function 함수에 bp를 건다.
함수 프롤로그를 포함한다.
b * [address] 특정 주소에 break를 건다.
stepi (si) 코드를 한줄 실행 / 함수를 만났을때 함수 안으로 들어간다.
nexti (ni) 코드를 한줄 실행 / 함수를 만났을때 함수 안으로 들어가지 않는다.
print [function] (p) 해당 함수의 주소 출력
p $[register] 해당 레지스터 값 출력
p / [출력형식] [register] 출력형식에 맞추어 레지스터값 출력
[d] 부호없는 10진수
[x] 16진수
[Tip] - 참고로 os + 환경마다 다를 수 있다.
32bit 운영체제에서 0x0804800 으로 시작하는 부분이 코드가 시작되는 부분이고 0xb7~ 로 시작하는 부분이 공유 라이브러리의 주소다.
<메모리 상태 검사 명령어>
x / [범위] [출력 형식] [범위의 단위] [메모리 주소나 함수명]
x/[범위] i [address] 특정 주소를 범위 만큼 어셈블리로 출력
x/[범위] s [address] 특정 주소를 범위 만큼 문자열로 출력
x/[범위] wx [address] 특정 주소를 범위 만큼 16진수로 4byte 단위로 출력
set {type} [address] 특정 메모리에 값을 지정
ex) set {int} [address] = 100 이 주소에 100이라는 int형 정수가 들어감
set $[register] 특정 레지스터에 값을 지정
ex) set $eip = 0x41414141 eip의 값을 0x41414141로 지정
참고 : http://shayete.tistory.com/entry/2-Stack-Corruption-gdb-%EB%AA%85%EB%A0%B9%EC%96%B4?category=857069
반응형'System hacking training > Knowledge' 카테고리의 다른 글
ELF Technique - RTL Chaining (1) 2018.02.22 ELF Technique - RTL(Return To Library) (0) 2018.02.16 ELF Memory Protection - DEP/NX (0) 2018.02.10 ELF Memory Protection - ASCII Armor (0) 2018.02.06 ELF Memory Protection - ASLR (0) 2018.02.06