gdb

이동화·2025년 7월 3일

Debugger

  • Bug : 프로그램에서 의도치 않게 발생한 문제
  • Debugger : 버그를 없애기 위해 사용하는 도구로, 프로그램을 어셈블리 코드 단위로 실행하면서 실행 결과와 프로그램의 내부 상황을 사용자에게 화면으로 출력하여 보여준다.
    개발자들은 버그를 고치기 위하여 사용하고, 해커들은 취약점을 발견하기 위하여 사용한다.

GDB (GNU debugger)

  • Linux의 대표적인 디버거
    UI가 많이 구려 플러그인을 통해서 보완되어있다.
  • pwndbg : 가장 보편적인 gdb 플러그인
  • gef : 조금 더 헤비한 플러그인

gdb usage

  • file
    파일 열기 (gdb {filename}으로도 가능)
  • disas {function}
    함수 디스어셈블
  • x/i,s {addr}
    메모리에 적재된 명령어/문자열 출력
  • x/b, h, w, gx, x {addr}
    메모리에 적재된 값을 1/2/4/8byte/최근 사용한 타입 을 little endian으로 출력
  • run <<< {input}
    실행할 때 인자 넣어주기
  • b*{0xaddr}
    breakpoint 설정
    d {num}를 통해 num 번째 bp를 delete할 수 있음.
    disable, enable을 통해서 bp를 비활성화/활성화 할 수 있음
  • info b / r
    걸려 있는 bp / register 정보 확인
    i b로도 확인 가능
    breakpoint에 접근할 때에는 continue, c를 사용해여 한다.
  • i r ${register name}
    레지스터에 저장된 내용 확인
  • start
    entrypoint 진입 (bp 걸어서)
  • p {symbol}
    함수 (symbol)의 주소 확인
  • vmmap (실행 상태에서)
    메모리에 매핑된 영역의 주소, 권한 상태를 보여줌
    gdb는 디버깅을 용이하게 하기 위하여 매번 동일한 주소로 매핑한다.
  • ni/si
    한 줄씩 실행. 전자는 step over, 후자는 step into를 수행함
    진입한 함수를 벗어나고 싶다면 finish를 통해 함수를 종료할 수 있다.
  • set ${register} / set \*{type} {addr}
    레지스터 / 메모리 영역에 적재된 값 수정
  • telescope
    특정 주소의 메모리가 참조하고 있는 주소를 재귀적으로 탐색하여 값을 보여준다.
  • backtrace, bt
    call stack을 확인할 수 있음
  • context
    주요 메모리들의 상태를 요약하여 보여줌.
    register - disassem - stack - backtrace
  • watch
    특정 주소에 저장된 값이 변경되면 bp가 걸리는 명령어
  • catch
    특정 이벤트가 발생했을 때 bp가 걸리는 명령어
profile
notion이 나은듯

0개의 댓글