[시스템 해킹] gdb 사용법

zzoni·2022년 7월 11일
0

시스템해킹

목록 보기
2/15
post-thumbnail

◼ start

디버깅 시작 gdb [실행파일명]
-ex : gdb debugee

  • 리눅스 실행파일 형식 : ELF(Executable and Linkable Format)
    • 크게 헤더와 여러 섹션으로 구성
    • ELF의 헤더 중에 진입점 (EP:Entry Point) 라는 필드
      : 운영체제는 ELF를 실행할 때 EP의 값부터 프로그램 실행
      -> readelf로 확인할 수 있음.

gdb의 start 명령어는 진입점부터 프로그램을 분석할 수 있게 해주는 명령어다.



◼ break & continue

  • break : b *func -> func 함수에 중단점
  • continue : c

◼ 중단점 해제

info breakpoint로 리스트 확인 후, 해당 breakpoint의 number를 delete 명령 인수로 입력
delete 2


◼ run

r
start와 차이점?
start는 자동으로 중단점이 설정되었다면
run은 중단점이 없으면 중단없이 쭉 실행됨.



◼ disassembly

ex disassembly main
u, nearpc, pdisassemble
: 디스어셈블된 코드를 가독성 좋게 출력해줌.


◼ navigate

중단점에서 한줄씩 보기!
ni : next instruction
si : step into
만약 call 등을 통해 서브루틴을 호출하는 경우
ni는 서브루틴의 내부로 들어가지 않지만,
si는 내부로 들어감!
step into 중에 함수 이제 다 봤고, 해당 서브루틴 관찰을 끝내고 싶다면 finish를 통해 함수를 끝낼 수 있다.



◼ examine

x를 이용하면
특정주소에서 원하는 길이만큼의 데이터를 원하는 형시으로 인코딩하여 볼 수 있다.

원하는 형식의 인코딩
o(octal) ,   x(hex) ,   d(decimal) ,   u(unsigned decimal) ,   t(binary) ,   f(float) ,   a(address) ,   i(instruction) ,   c(char) ,   s(string) ,   z(hex, zero padded on the left)
원하는 길이
b(byte) ,   h(halfword) ,   w(word) ,   g(giant, 8 bytes)

  • ex rsp부터 80바이트8바이트씩 hex형식으로 출력
    x/10gx $rsp

  • ex rip부터 5줄의 어셈블리 명령어 출력
    x/5i $rip

  • ex 특정주소문자열 출력
    x/s 0x400000


◼ telescope

특정 주소의 메모리 값들을 보여주는 것에서 그치지 않고, 메모리가 참조하고 있는 주소를 재귀적으로 탐색하여 값을 보여준다.


◼ vmmap

어떤 파일이 매핑된 영역일 경우, 해당 파일의 경로까지 보여줌.

  • 파일 매핑 : 어떤 파일을 메모리에 적재하는 것
  • 리눅스에서는 ELF를 실행할 때, 먼저 ELF의 코드와 여러 데이터를 가상 메모리에 매핑하고, 해당 ELF에 링크된 공유 오브젝트를 추가로 메모리에 매핑한다.
    • 공유오브젝트 : 자주 사용되는 함수들을 미리 컴파일해둔 것
      여기에 이미 구현된 함수를 호출할 때는 매핑된 메모리에 존재하는 함수를 대신 호출한다.

◼ gdb/python

gdb를 통해 디버깅할 때 직접 입력할 수 없는 경우
파이썬으로 입력값을 생성하고 사용하여야 함.


◼ gdb/python argv

ex : r $(python -c 'print "\xff"*100')
print함수를 통해 출력한 값을 run 명령어의 인자로 전달하는 명령어


◼ gdb/python input

입력값으로 전달하기 위해서는 <<< 문자를 사용
ex : r $(python -c 'print "\xff"*100') <<< $(python -c 'print "zzoni"')
argv[1]에 임의의 값을 전달하고, 값을 입력하는 명령어





출처 : dreamhack

profile
모든 게시물은 다크모드에서 작성되었습니다!

0개의 댓글