1. 사용

컴파일 할때 -g 옵션을 사용해서 컴파일 gcc -g -o (프로그램명) (소스파일명)

실행: gdb (프로그램명)


2. 종료

q, quit, ctrl+d


3. 소스보기 (list / l)

10줄씩 출력한다.   (*출력단위 변경 ; set listsize (줄 단위) )

list : 메인함수 기준 출력

list (숫자) : 숫자를 기준으로 10줄 출력

list function : 함수 소스 출력

list - : 현재 출력된 리스트의 이전 행을 출력


4. 실행

(1) run /r : 이상이 발생했을때 오류가 생긴 부분도 출력해줌 

(2) bt : back trace 의 약어로 오류가 생긴부분에서 그 전 과정을 보여준다. 

(3) kill / k : 프로그램 종료

(4) step / s: 현재 행 실행. 함수안으로 들어갈 수 있음 (s 3 : step 3번한 결과)

(5) next / n : 현재 행 실행. 함수도 바로 실행(n 4: next 4번 결과)

* s/n다음에 i를 붙이면 어셈단위 실행 (si, ni)

(6) continue / c : 다음 bp까지 실행

(7) finish : 현재함수 수행 후 빠져나감

(8) return : 현재 함수 수행하지 않고 빠져나간다 (return (값) : 리턴값 지정 가능)



5. bp(break point 설정)

break / b

(1) break (행 번호) : 그 행에 bp 설정

(2) break (함수 이름) : 함수의 시작 부분에 bp 설정

(3) break (파일이름):(함수이름) : ~파일의 ~함수의 시작부분에 bp설정

(4) break +/- (숫자) : 현재에서 숫자만큼 더하거나 뺀부분에 bp설정

(5) break *0x111111: 특정 주소에 설정

(6) break ... if (조건) : 조건을 만족할때 bp설정

(7) tb : 1회용 bp

(8) info break : 현재 bp 정보

(9) cl : bp 지우기        delete (n) : 고유번호 n번의 bp지우기

(10) d : 모든 bp지우기


(11) watch (변수) : 특정 변수에 watch 를 설정하면 이 변수가 바뀔때마다 break 가 걸리면서 값을 출력


6. 변수 정보

info locals : 현재 상태의 지역변수와 값을 보여줌

info variables : 전역변수 리스트

info registers : 레지스터 전체 리스트

p/print (변수) : 변수 값
 p (함수명)  : 함수의 주소 

중복된 변수가 있는 경우 ( 지역변수 우선 ) -> p '(파일명)'::(변수명) : -파일에 있는     전역변수 를 출력

포인터 변수의 경우 위의 방법으로 하면 주소값만 출력.
포인터 변수의 값 또는 포인터 구조체 등의 값을 보기 위해서는 * 를 붙여준다.
   p  *(변수)
    p $(레지스터명)
   print (함수명)::(변수명) : 특정 함수 내 변수

p명령어는 기본적으로 10진수로 출력한다.

다른진수로 출력하는 법 

    p/t (변수)    2진수
    p/o (변수)    8진수
    p/d (변수)    10진수
    p/u (변수)    부호없는 10진수
    p/x (변수)    16진수
    p/c (변수)    최초 1바이트 값을 문자형으로
    p/f (변수)    부동소수점값
   
p는 값을 설정하는 것도 가능

    p (변수) = 값 


7. 변수 디스플레이

display (변수) : 진행중 계속 변수 출력

undisplay (변수) : 디스플레이 없애기 

disable/enable display (변수) : 일시정지/활성


8. 스택

frame / f

info f : 현재 스택프레임 정보

frame (프레임 번호) : ~번 프레임으로 이동

up : 상위 프레임 이동

down : 하위 프레임 이동

info args : 현재 스택 프레임 함수의 인자 출력

info locals : 현재 스택프레임 함수의 지역변수


9. 메모리 상태

x/(범위) (출력형식) (범위 단위) : 메모리 특정범위의 값 확인 (기본 단위 : 4 byte)


출력방식

-t : 2진수

-o : 8진수

-d / u : 부호없는 10진수

-x : 16진수

-c : 최초 1바이트 문자로 출력

-f : 부동소수점

-s : 문자열

-i : 어셈형식


범위 단위

-b : 1byte

-h : 2byte

-w : 4 byte

-g : 8byte


예시 : x/10tb main : main 함수로 부터 10 byte 를 2진수로 출력

   x/10xg 0x1293834 : 주소로 부터 80byte를 8 byte 단위로 15진수로 출력


10. 디스 어셈블링

disas (함수이름)

disas (시작주소) (끝주소) : 어셈블리 코드를 보여줌


11. 함수 호출

call (함수이름)((인자1),(인자2)) : 특정함수 인자값으로 호출


12. 주소로 분기

jump *0x123532 : ~주소로 분기

jump (행번호) : ~행으로 분기

jump (함수) : -함수로 분기


13. 시그널


14. info 명령


15. 환경설정





'시스템 > 리눅스 기본' 카테고리의 다른 글

라이브러리 참조순서  (0) 2016.10.15
알아두면 좋은 명령어 모음  (0) 2016.10.13
gdb layout  (0) 2016.10.13
find 명령어 정리  (0) 2016.09.30
shellcode  (0) 2016.09.20

+ Recent posts