yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆

gdb 명령어 모음 본문

컴퓨터 시스템

gdb 명령어 모음

yehey 2020. 9. 7. 00:45

gdb 명령어 모음

 

시작과 종료

  • gdb (프로그램명): 시작

  • q(quit) / ctrl+d: 종료

  • file 프로그램명: 디버깅할 프로그램으로서 파일을 사용한다.

  • disas 함수명: 특정 함수의 어셈블리 코드 출력

  • disas [주소] [주소]: 주소 사이의 어셈블리 코드 출력

  • jump *[주소]: 주소로 강제적 분기 (주소 외에 행번호, 함수명도 가능)

  • set{타입}[주소]=값 : 특정 메모리에 값을 지정한다.


소스 보기 

  • list: 현재 위치에서 소스파일의 내용을 10줄 보여준다.

  • list num1, num2: 소스 파일의 num1~num2까지를 보여준다


브레이크 포인트

  • break: 특정 라인이나 함수에 정지점을 설정한다. (b를 입력해도 break 실행)

  • break(b) 함수명: 함수명에 해당하는 함수의 시작 부분에 브레이크 포인트 설정

  • break num1: num1행에 브레이크 포인트 설정

  • b 주소: 특정 주소에 브레이크 포인트 설정

  • tb: 1회용 브레이크, 문법은 b와 동일

  • info b: 현재 브레이크 보기, 브레이크 상태 표시

  • clear(cl): 브레이크 포인트 지우기

  • delete(d): 모든 브레이크 포인트 지우기


진행

  • run(r): 프로그램을 시작한다. (break가 있다면 break까지 실행한다.)

  • run arg: 새로운 인수를 가지고 프로그램을 시작한다.

  • kill(k): 디버깅 중인 프로그램의 실행을 취소한다.

  • step(s): 한 줄씩 실행시킨다. 함수를 포함하고 있으면 함수 내부로 들어가서 한 줄씩 수행한다.

  • s num1: step을 num1번 수행한다.

  • next(n): 다음 행을 수행한다. 서브 루틴을 호출하면서 계속 수행한다. (호출이 발생하지 않으면 step과 같음)

  • n num1: next를 num1번 수행한다.

  • continue(cont): 현재 위치에서 프로그램을 계속 실행, 다음 브레이크 포인트까지 진행

  • u: 현재 루프를 빠져나간다.

  • finish: 현재 함수를 수행하고 빠져나간다.

  • return: 현재 함수를 수행하지 않고 빠져나간다.


와치 포인트

  • watch 변수명: 특정 변수에 와치 포인트를 설정, 특정 변수가 바뀔 때마다 브레이크가 걸리고 이전/현재 값을 출력한다.


변수 출력 관련

  • info locals: 현재 스택의 지역변수 모두를 출력한다.

  • info variables: 전역변수를 모두 출력한다.

  • info registers: 레지스터를 전체 출력한다.

  • p(print) 변수명: 해당 변수의 값을 출력한다. (포인터변수 입력시 주소값이 출력된다.)

  • p $레지스터명: 레지스터 값을 출력한다.

  • p *포인터: struct/class 배열일 때 배열의 크기를 알려준다.

  • p/출력형식 변수명: 출력 형식에 맞춰 변수 값을 출력한다.

  • display 변수명: 특정변수를 진행 중에 계속 출력한다.


스택 상태 검사

 

  • info f: 스택 프레임 내용 출력

  • info args: 함수 호출시 인자를 출력

  • info catch: 함수의 예외 핸들러를 출력

  • bt: 전체 스택 프레임 출력

  • up: 상위 스택 프레임으로 이동

  • down: 하위 스택 프레임으로 이동


메모리 상태 검사

: x/[범위][출력 형식][범위의 단위 (기본 4byte)][메모리 주소나 함수명]

 

출력 형식

  • t: 2진수

  • o: 8진수

  • d: 10진수

  • u: 부호 없는 10진수

  • x: 16진수 (주소를 보기 위해 가장 많이 사용)

  • c: 문자형 출력(크기가 4바이트 이상이면 처음 1바이트 출력)

  • f: 부동 소수점 값 형식으로 출력

  • a: 가장 가까운 심볼의 오프셋 출력

범위의 단위

  • b: 1byte

  • h: 2byte

  • w: 4byte

  • g: 8byte

ex) (gdb)x/32bx main

:: 메인함수 시작지점부터 b(1바이트)를 32번 출력하는데, x(16진수)로 출력하라.

 

자주 쓰는 gdb 사용해보기

 

attcakme 실행파일 gdb시작

 

disas main입력, main함수 어셈블리 코드 출력

 

main에 break point 지정, breakpoint 확인

 

프로그램을 실행(r), 메인 함수 시작점에서 브레이크 포인트에 걸림

 

메모리 상태 검사, 메인함수 시작점에서 40바이트 출력

 

'컴퓨터 시스템' 카테고리의 다른 글

gdb 사용하기  (0) 2020.09.06
어셈블리어 명령어와 범용 레지스터  (0) 2020.09.06
8086 Memory Architecture, register  (0) 2020.09.06
컴퓨터 시스템의 기초  (0) 2020.09.05
Comments