GDB 명령어 정리

Posted by : on

Category : reversing   learning


GDB 명령어 정리 이미지 링크

  • gcc -g 디버깅 옵션을 줘서 컴파일을 진행한다. (함수정보나 여러 정보가 들어간다.)
  • gdb [프로그램] 디버그 실행
  • gdb -p [PID] 실행중인 프로세스 디버그 (ps나 ps -ef명령어를 통해 프로세스 조회 후 grep으로 찾아내기로 pid를 찾는다.)
  • l (list) gcc -g명령을 통해 컴파일을 했을 경우, 소스코드를 출력한다. 인자로는 숫자(행), 문자(함수이름), 파일명:문자(파일 내 함수나 행)이 있다.
  • r (run) 프로그램을 실행한다. 인자로 무엇을 입력할 시, 프로그램에 인자를 준 채로 실행할 수 있다. 프로그램 실행 중 python이나 perl을 이용해 인자를 주고 싶은 경우 특수한 명령어가 필요하다.
  • c (continue) 프로그램을 계속해서 실행한다.
  • s (step) 현재 행을 수행한다. (함수로 들어간다.) 인자로는 반복 횟수가 들어간다.
  • n (next) 현재 행을 수행한다. (함수를 넘어간다.)
  • si (step instruction) 현재 인스트럭션을 수행한다. (call명령어로 들어간다.)
  • ni (next instruction) 현재 인스트럭션을 수행한다. (call명령어를 넘어간다.)
  • k (kill) 프로그램을 종료한다.
  • disas (disassemble) 어셈블리 명령어를 표시한다. 인자로는 함수명, 0x주소가 있다. 추가로 인자를 두개 넣을 시, A부터 B까지의 어셈블리어를 표시한다.
  • b (break) 브레이크포인트를 건다. 인자로는 함수명, 라인(소스코드), *0x주소가 있다. 변수에 대한 정보가 있을 시 if 변수 > 값 등, 조건을 추가할 수 있다. (기존 브레이크포인트에 condition명령어를 통해 조건을 추가 가능)
  • tb 임시 브레이크를 건다.
  • d (delete) 브레이크포인트를 지운다. 인자로는 브레이크포인트 고유번호가 들어간다. (info b나 info break를 통해 고유번호를 알아낼 수 있다.)
  • cl (clear) 브레이크포인트를 지운다. 인자로는 함수명, 라인(소스코드), *0x주소가 있다.
  • enable 브레이크포인트를 활성화한다. 인자로는 브레이크포인트 고유번호가 들어간다.
  • disable 브레이크포인트를 비활성화한다. 인자로는 브레이크포인트 고유번호가 들어간다.
  • p (print) 여러 값을 출력한다. 인자로는 변수명(함수명), $레지스터명이 들어간다. p/x등의 방법을 이용해 표기 형태를 정할 수 있다. 추가로 =을 이용해 값을 설정할 수 있다.
  • display 값을 멈출때마다 출력한다. 인자는 p와 같다.
  • undisplay 디스플레이 설정을 해제한다. 인자로는 디스플레이 고유번호가 들어가며, info display를 통해 디스플레이 번호를 알아낼 수 있다.
  • enable display 디스플레이를 활성화한다. 인자로는 디스플레이 고유번호가 들어간다.
  • disable display 디스플레이를 비활성화한다. 인자로는 디스플레이 고유번호가 들어간다.
  • watch 인자에 변수명이 들어가며, 변수의 값이 변할 때 브레이크가 걸린다.
  • x 인자가 가리키는 주소의 값을 출력한다. (0x주소, 함수명, 주소가 담긴 변수명, *주소가 담긴 위치의 추소 등..) x/x등의 방법을 이용해 표기 형태를 정할 수 있다.
  • x/1x 인자가 가르키는 주소의 값부터 4바이트를 16진수로 출력한다.
  • j (jump) 현재 실행하는 주소를 변경한다. 인자로는 행이나 *주소, 함수명 등이 들어간다.
  • set 값을 설정한다. set {타입}0x주소 = 값
  • bt 호출 스택을 본다.
  • thread 인자가 가르키는 스레드로 변경한다. (info threads를 통해 정보를 알아낼 수 있다.) thread apply all bt를 통해 모든 스레드의 호출 스택을 볼 수 있다.
  • I (info) 여러 정보를 보여준다.
  • info files 파일에 대한 정보를 보여준다. 엔트리포인트와 메모리맵이 여기에 포함된다. 한번 실행 후 실행하여야 제대로 주소가 표시되는 경우가 많다.
  • info registers (I r) 레지스터에 대한 정보를 보여준다.
  • info frame (I f) 스택 프레임에 대한 정보를 보여준다.
  • info breakpoints (I b) 브레이크포인트에 대한 정보를 보여준다.
  • info display 디스플레이에 대한 정보를 보여준다.
  • info locals 지역변수에 대한 정보를 보여준다.
  • info variables 전역변수에 대한 정보를 보여준다.
  • info signals 시그널의 종류에 대해 출력한다. (signal 종류로 프로세스에게 시그널을 보낼 수 있다. kill명령어와 같음.)
  • info functions 함수에 대한 정보를 출력한다.
  • info args 현재 프레임의 인자를 출력한다.
  • info catch 현재 프레임의 예외 핸들러를 출력한다
  • call 함수를 호출하여 반환값을 출력한다. 인자에는 함수명과 인자가 들어간다. (함수명(인자, 인자))
  • finish 함수를 수행하고 빠져나간다.
  • return 함수를 수행하지 않고 빠져나간다. 인자로 리턴값을 줄 수 있다.
  • f (frame) 스택 프레임 정보를 표시하거나 특정 스택 프레임으로 변경할 수 있다. 인자로는 번호가 들어가, 해당 프레임으로 변경 가능하다. up과 down 명령어로 스택 프레임을 상위나 하위로 옮길 수 있다. 상위 프레임으로 갈 수록 메인 함수에 가까워진다.
  • 출력 형식 t - 2진수, o - 8진수, d - 10진수, u - 부호없는 10진수, x - 16진수, c - 문자(4바이트 이상이 값일 경우 처음 1바이트만 출력), s - 문자열, f - 부동소수점, a가장 가까운 심볼의 오프셋, I - 어셈블리 명령어
  • 출력 단위 x/20(단위)(형식)과 같은 형태로 사용가능하다. b - 1바이트, h - 2바이트, w - 4바이트, g - 8바이트
  • set listsize 한번에 출력하는 행의 개수를 정한다.

About 영원염원영웅
영원염원영웅

공부하는것을 좋아합니다.

Email : xhve00000@gmail.com

Website : http://eveheeero.com

Useful Links