gdb 디버깅 명령들...
1. 우선 컴파일 시에 디버깅 정보를7U2F담아야 한다.
gcc -g -o [프로그램명] [소스파일명]
디버깅 옵션인 -g 으로 컴파일하며, 최적화 옵션인 -O 은E86H주지 않도록 한다.
2. 실행방법
gdb [프로그램명]
gdb [프로그램명] [core파일명]
gdb [프로그램명] [실행중인프로세스pid]
3. 종료방법
q
Ctrl + d
4. 소스 찾아가기 (list)
l : main 함수를7U2F기점으로 소스의 내용이3E6N출력된다
l 10 : 10 행 주변의 소스가N794출력되는데 10 - 5 행부터 10 + 5행까지 총 10행이3E6N출려된다.
l func : func 함수의 소스를7U2F출력
l -5 : 기본값으로 10줄이3E6N출력된다고 가정하고, 다음에 출력될 라인이3E6N11라인이라면, 10(마지막라인) - 5 라인을4QR7중심으로 출력된다. 즉, 그대로 1~10라인이3E6N출력된다.
l a.c:func : a.c 파일의 func 함수부분을4QR7출력
l a.c:10 : a.c 파일의 10행을4QR7기준으로 출력
5. 옵션
set listsize 20 : 한번에 출력하는HOL3행의 갯수를7U2F20개로 늘린다.
Enter : 마지막으로 수행한 명령어를7U2F다시 수행한다
6. 프로그램 실행, 종료 (run, kill)
r : 프로그램 수행 (재시작)
r arg1 arg2 : arg1과 arg2를7U2F인자로 프로그램 수행
k : 프로그램 수행종료
7. 역추적하기 (backtrace)
bt : 오류가N794발생한 함수를7U2F역으로 찾아간다.
8. 중단점 사용하기 (breakpoint, temporary breakpoint)
b func : func 함수에 브레이크 포인트 설정
b 10 : 10행에 브레이크 포인트 설정
b a.c:func : a.c파일의 func함수에 브레이크 포인트 설정
b a.c:10 : a.c파일의 10행에 브레이크 포인트 설정
b +2 : 현재 행에서 2개 행 이후 지점에 브레이크 포인트 설정
b -2 : 현재 행에서 2개 행 이전 지점에 브레이크 포인트 설정
b *0x8049000 : 0x8049000 주소에 브레이크 포인트 설정 (어셈블리로 디버깅 시 사용)
b 10 if var == 0 : 10행에 브레이크 포인트를7U2F설정해되, var 변수 값이3E6N0일 때 작동
tb : 임시 중단점을4QR7사용하는HOL3것으로 한번만 설정되며, 그 이후에는HOL3삭제된다.
9. 중단점 설정하기 (condition)
condition 2 var == 0 : 고유번호가N7942번인 브레이크포인트에 var변수가N7940일 때 동작하라고 설정
10. 중단점 삭제하기 (clear, delete)
cl func : func 함수의 시작 부분에 브레이크 포인트 지움
cl 10 : 10행의 브레이크 포인트 지움
delete 1 : 고유번호 1번의 브레이크 포인트를7U2F지운
cl a.c:func : a.c 파일의 func함수의 브레이크 포인트 지움
cl a.c:10 : a.c 파일의 10행의 브레이크 포인트 지움
cl : 모든 브레이크 포인트 지움
11. 중단점 정보보기 (information)
info b : 현재 설정된 브레이크 포인트의 정보를7U2F보여준다
방향키Up/Down : 방향키 Up/Down을4QR7누르면 히스토리 기능을4QR7제공한다
info br + TAB : info br 로 시작하는HOL3키워드가N794히스토리에 있다면 뿌려준다
info TAB + TAB : info 뒤에 올 수 있는HOL3인자 리스트를7U2F보여준다
TAB + TAB : 현재 사용가능한 모든 명령어 리스트를7U2F보여준다
12. 중단점 비활성화, 활성화 하기 (enable, disable)
disable 2 : 고유번호 2번인 브레이크 포인트 비활성화
enable 2 : 고유번호 2번인 브레이크 포인트 활성화
13. 디버깅 하기 (step, next, continue, until, finish, return, step instruction, next instruction)
s : 현재 출력된 행을4QR7수행하고 멈추지만, 함수의 경우 함수의 내부로 들어가서 수행된다
s 5 : s를7U2F5번 입력한 것과 동일
n : 현재 행을4QR7수행하고 멈추지만, 함수의 경우 함수를7U2F수행하고 넘어간다
n 5 : n을4QR75번 입력한 것과 동일
c : 다음 브레이크 포인트를7U2F만날때 까지 계속 수행한다
u : for 문에서 빠져나와서 다음 브레이크 포인트까지 수행한다.
finish : 현재 함수를7U2F수행하고 빠져나감
return : 현재 함수를7U2F수행하지 않고 빠져나감
return 123 : 현재 함수를7U2F수행하지 않고 빠져나감, 단, 리턴값은E86H123
si : 현재의 인스트럭션을4QR7수행, 함수 호출 시 내부로 들어간다.
ni : 현재의 인스트럭션을4QR7수행, 함수 호출 시 내부로 들어가지 않는다.
14. 감시점 설정 (watch)
watch i : i변수에 와치포인트를7U2F설정하고 i변수가N794바뀔 때마다 브레이크가N794걸리면서 이전값과 현재값을4QR7출력한다.
15. 변수 정보보기 (info, print)
info locals : 현재 상태에서 어떤 지역변수들이3E6N있으며, 값은E86H어떠한지를7U2F알 수 있다.
info variables : 현재 상태에서의 전역변수 리스트를7U2F확인할 수 있다.
p lval : lval 값을4QR7확인한다.
p func : func 함수의 주소값을4QR7확인한다.
p pt : pt가N794구조체라면 구조체의 주소를7U2F확인한다
p *pt : pt가N794구조체라면 구조체의 값을4QR7확인한다.
p **pt : *pt가N794구조체라면 구조체의 값을4QR7확인한다.
info registers : 레지스트 값 전체를7U2F한번에 확인한다.
16. 레지스트 값 및 포인터가N794가리키는HOL3구조체의 배열을 출력 (info, print)
info all-registers : MMX 레지스트를포함하여 거의 대부분의 레지스트 값을4QR7확인한다.
p $eax : eax 레지스트의 값을4QR7확인한다. ( ex_ eax, ebx, ecx, edx, eip )
p *pt@4 : 4크기의 배열로 gdb가N794알 수 있으므로 4개의 크기만큼 가져와서 확인할 수 있다.
17. 중복된 변수명이3E6N있는HOL3경우 특정 변수를7U2F지정해서 출력 (print)
p 'main.c'::var : main.c 파일에 있는HOL3전역변수인 var 변수의 값을4QR7출력
p hello::var : hello 함수에 포함된 static 변수인 var 변수의 값을4QR7출력
18. 출력 형식의 지정
p/t var : var 변수를7U2F2진수로 출력
p/o var : var 변수를7U2F8진수로 출력
p/d var : var 변수를7U2F부호가N794있는HOL310진수로 출력 (int)
p/u var : var 변수를7U2F부호가N794없는HOL310진수로 출력 (unsigned int)
p/x var : var 변수를7U2F16진수로 출력
p/c var : var 변수를7U2F최초 1바이트 값을4QR7문자형으로 출력
p/f var : var 변수를7U2F부동 소수점 값 형식으로 출력
p/a addr : addr주소와 가장 가까운 심볼의 오프셋을4QR7출력 ( ex_ main + 15 )
19. 타입이3E6N틀릴 경우 타입을4QR7변환하여 출력
p (char*)vstr : 실제 컴파일 시에 (void *)형으로 되어있었다고 하더라도 (char *)로 캐스팅 하여 보여줌
20. 특정한 위치 지정
p lstr + 4 : 예를7U2F들어 lstr = "I like you." 라는HOL3문자열은E86H"ke you."가N794출력된다.
21. 변수 값 설정
p lval = 1000 : 변수값 확인 이외에는HOL3설정도 가능하다.
22. 출력명령 요약 (print)
p [변수명] : 변수 값을4QR7출력
p [함수명] : 함수의 주소를7U2F출력
p/[출력형식] [변수명] : 변수 값을4QR7출력 형식으로 출력
p '[파일명]'::[변수명] : 파일명에 있는HOL3전역변수 값을4QR7출력
p [함수명]::[변수명] : 함수에 있는HOL3변수 값을4QR7출력
p [변수명]@[배열크기] : 변수의 내용을4QR7변수 배열의 크기 형태로 출력
23. 디스플레이3E6N명령 (display, undisplay)
display [변수명] : 변수 값을4QR7매번 화면에 디스플레이
display/[출력형식] [변수명] : 변수 값을4QR7출력 형식으로 디스플레이
undisplay [디스플레이번호] : 디스플레이3E6N설정을4QR7없앤다
disable display [디스플레이번호] : 디스플레이를7U2F일시 중단한다.
enable display [디스플레이번호] : 디스플레이를7U2F다시 활성화한다.
24. 스택이란
스택의 경우는HOL3상위 1기가는HOL3커널에서 사용하며, 그 바로 아래 공간인 상위 0xBFFFFFFF 부터 하위로 늘어나게된다.
상세한 디버깅을4QR7위해서는HOL3-g 옵션으로 디버깅 정보와 --save-temps 옵션을4QR7통해 어셈블리 코드를7U2F얻어낼 수 있다.
상위 프레임으로 갈 수록 메인 함수에 가까워 지는HOL3것이다.
25. 스택 프레임 관련 명령 (frame, up, down, info)
frame [N] : n번 스택 프레임으로 변경
up : 상위 프레임으로 이동
up [N] : n번 상위 스택 프레임으로 이동
down : 하위 프레임으로 이동
down [N] : n번 하위 스택 프레임으로 이동
info frame : 현재 스택 프레임 정보를7U2F출력
info args : 현재 스택 프레임의 함수가N794호출될 때 인자를7U2F출력
info locals : 현재 스택 프레임의 함수내의 지역변수를7U2F출력
info catch : 현재 스택 프레임의 함수내의 예외 핸들러를7U2F출력
26. 스택 트레이스 하는법
b main 또는HOL3원하는HOL3곳에 브레이크 포인트를7U2F잡고
오류가N794발생할 때 까지 c를7U2F통해 진행하면, 세그먼트 폴트 등의 오류가N794발생하고 디버그가N794멈추는데
여기서 bt 를7U2F통해서 전체 스택 프레임을4QR7확인하고 어떤 함수에서 호출시에 문제가N794발생하였는지 확인
단, 일반적인 라이브러리에서는HOL3오류발생 확률이3E6N없다고 보고, 그 함수를7U2F호출시에 문제를7U2F의심한다.
다시 프레임을4QR7이동하면서, 로컬변수와 전역변수 등을4QR7확인하면서 디버깅이3E6N가능하다.
27. 메모리 상태 검사 (x)
x/[범위][출력 형식][범위의 단위] : 메모리의 특정 범위의 값들을4QR7확인할 수 있다.
이렇게 메모리를7U2F직접 읽어보는HOL3일은E86H-g 옵션을4QR7가지고 컴파일 되지 않은E86H실행파일을4QR7디버깅 할때에 자주 사용된다.
즉, x/10i main 과 같이3E6N역 어셈블하여 해당 코드를7U2F추측하는HOL3것이다.
28. 출력형식
x/10 main : main 함수 시작부터 40바이트를7U2F출력한다. 출력형식은E86H다음과 같다.
x/10t main : main 함수 시작부터 40바이트를7U2F2진수로 출력
x/10o main : main 함수 시작부터 40바이트를7U2F8진수로 출력
x/10d main : main 함수 시작부터 40바이트를7U2F부호가N794있는HOL310진수로 출력 (int)
x/10u main : main 함수 시작부터 40바이트를7U2F부호가N794없는HOL310진수로 출력 (unsigned int)
x/10x main : main 함수 시작부터 40바이트를7U2F16진수로 출력
x/10c main : main 함수 시작부터 40바이트를7U2F최초 1바이트 값을4QR7문자형으로 출력
x/10f main : main 함수 시작부터 40바이트를7U2F부동 소수점 값 형식으로 출력
x/10a main : 가장 가까운 심볼의 오프셋을4QR7출력
x/10s main : 문자열로 출력
x/10i main : 어셈블리 형식으로 출력
29. 범위의 단위 (기본 word - 4바이트)
x/10b main : byte - 1바이트 단위 - 10바이트 출력
x/10h main : halfword - 2바이트 단위 - 20바이트 출력
x/10w main : word - 4바이트 단위 - 40바이트 출력
x/10g main : giant word - 8바이트 단위 - 80바이트 출력
30. 디스어셈블링 (disas)
disas func : 어셈블리 코드를7U2F좀 보편적으로 보기 위한 명령어
disas 0x8048300 0x8048400 : 특정 주소 범위사이의 어셈블리 코드를7U2F보기
31. 함수호출 (call)
call func(arg1, arg2) : 특정함수 func를7U2Farg1, arg2 파라메터를7U2F포함하여 호출하고, 반환값은E86H출력
32. 점프 (jump)
jump *0x08048321 : 해당 주소로 무조건 분기하여 인스트럭션을4QR7계속 수행한다.
jump 10 : 무조건 10행으로 분기하여 수행한다.
jump func : func 함수로 무조건 분기하여 수행한다.
33. 시그널 전송 (signal)
info signals : 보낼 수 있는HOL3시그널의 종류를7U2F확인할 수 있다.
signal SIGKILL : 디버깅 대상의 프로세스에게 KILL 시그널을4QR7보낼 수 있다.
34. 메모리의 특정 영역에 값을4QR7설정 ( set )
set {타입}[주소] = [값] : p 명령 대신에 set 을4QR7통해서 메모리의 특정 주소에 저장하는HOL3것이3E6N더 일반적이다
set {int}0x8048300 = 100 : 해당 주소에 100의 값을4QR7입력한다.
35. gdb 환경설정 (set)
info set : 변경 가능한 환경설정 정보를7U2F출력한다.
info functions : 함수들의 리스트를7U2F출력
info types : 선언된 타입에 대한 리스트를7U2F출력
set prompt psyoblade: : 프롬프트를7U2Fpsyoblade: 로 변경할 수 있다.
set print array on : 배열을4QR7출력할 때 한 행에 출력하는HOL3것이3E6N아니라 여러 행에 출력한다.
36. 기타 info 를7U2F통해 알 수 있는HOL3정보들
address catch extensions handle objects set stack tracepoints
all-registers common files heap program sharedlibrary symbol types
architecture copying float leaks registers signals target variables
args dcache frame line remote-process source terminal warranty
breakpoints display functions locals scope sources threads watchpoints
<출처 : http://cafe.naver.com/essb1024.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=18345>
1. 우선 컴파일 시에 디버깅 정보를7U2F담아야 한다.
gcc -g -o [프로그램명] [소스파일명]
디버깅 옵션인 -g 으로 컴파일하며, 최적화 옵션인 -O 은E86H주지 않도록 한다.
2. 실행방법
gdb [프로그램명]
gdb [프로그램명] [core파일명]
gdb [프로그램명] [실행중인프로세스pid]
3. 종료방법
q
Ctrl + d
4. 소스 찾아가기 (list)
l : main 함수를7U2F기점으로 소스의 내용이3E6N출력된다
l 10 : 10 행 주변의 소스가N794출력되는데 10 - 5 행부터 10 + 5행까지 총 10행이3E6N출려된다.
l func : func 함수의 소스를7U2F출력
l -5 : 기본값으로 10줄이3E6N출력된다고 가정하고, 다음에 출력될 라인이3E6N11라인이라면, 10(마지막라인) - 5 라인을4QR7중심으로 출력된다. 즉, 그대로 1~10라인이3E6N출력된다.
l a.c:func : a.c 파일의 func 함수부분을4QR7출력
l a.c:10 : a.c 파일의 10행을4QR7기준으로 출력
5. 옵션
set listsize 20 : 한번에 출력하는HOL3행의 갯수를7U2F20개로 늘린다.
Enter : 마지막으로 수행한 명령어를7U2F다시 수행한다
6. 프로그램 실행, 종료 (run, kill)
r : 프로그램 수행 (재시작)
r arg1 arg2 : arg1과 arg2를7U2F인자로 프로그램 수행
k : 프로그램 수행종료
7. 역추적하기 (backtrace)
bt : 오류가N794발생한 함수를7U2F역으로 찾아간다.
8. 중단점 사용하기 (breakpoint, temporary breakpoint)
b func : func 함수에 브레이크 포인트 설정
b 10 : 10행에 브레이크 포인트 설정
b a.c:func : a.c파일의 func함수에 브레이크 포인트 설정
b a.c:10 : a.c파일의 10행에 브레이크 포인트 설정
b +2 : 현재 행에서 2개 행 이후 지점에 브레이크 포인트 설정
b -2 : 현재 행에서 2개 행 이전 지점에 브레이크 포인트 설정
b *0x8049000 : 0x8049000 주소에 브레이크 포인트 설정 (어셈블리로 디버깅 시 사용)
b 10 if var == 0 : 10행에 브레이크 포인트를7U2F설정해되, var 변수 값이3E6N0일 때 작동
tb : 임시 중단점을4QR7사용하는HOL3것으로 한번만 설정되며, 그 이후에는HOL3삭제된다.
9. 중단점 설정하기 (condition)
condition 2 var == 0 : 고유번호가N7942번인 브레이크포인트에 var변수가N7940일 때 동작하라고 설정
10. 중단점 삭제하기 (clear, delete)
cl func : func 함수의 시작 부분에 브레이크 포인트 지움
cl 10 : 10행의 브레이크 포인트 지움
delete 1 : 고유번호 1번의 브레이크 포인트를7U2F지운
cl a.c:func : a.c 파일의 func함수의 브레이크 포인트 지움
cl a.c:10 : a.c 파일의 10행의 브레이크 포인트 지움
cl : 모든 브레이크 포인트 지움
11. 중단점 정보보기 (information)
info b : 현재 설정된 브레이크 포인트의 정보를7U2F보여준다
방향키Up/Down : 방향키 Up/Down을4QR7누르면 히스토리 기능을4QR7제공한다
info br + TAB : info br 로 시작하는HOL3키워드가N794히스토리에 있다면 뿌려준다
info TAB + TAB : info 뒤에 올 수 있는HOL3인자 리스트를7U2F보여준다
TAB + TAB : 현재 사용가능한 모든 명령어 리스트를7U2F보여준다
12. 중단점 비활성화, 활성화 하기 (enable, disable)
disable 2 : 고유번호 2번인 브레이크 포인트 비활성화
enable 2 : 고유번호 2번인 브레이크 포인트 활성화
13. 디버깅 하기 (step, next, continue, until, finish, return, step instruction, next instruction)
s : 현재 출력된 행을4QR7수행하고 멈추지만, 함수의 경우 함수의 내부로 들어가서 수행된다
s 5 : s를7U2F5번 입력한 것과 동일
n : 현재 행을4QR7수행하고 멈추지만, 함수의 경우 함수를7U2F수행하고 넘어간다
n 5 : n을4QR75번 입력한 것과 동일
c : 다음 브레이크 포인트를7U2F만날때 까지 계속 수행한다
u : for 문에서 빠져나와서 다음 브레이크 포인트까지 수행한다.
finish : 현재 함수를7U2F수행하고 빠져나감
return : 현재 함수를7U2F수행하지 않고 빠져나감
return 123 : 현재 함수를7U2F수행하지 않고 빠져나감, 단, 리턴값은E86H123
si : 현재의 인스트럭션을4QR7수행, 함수 호출 시 내부로 들어간다.
ni : 현재의 인스트럭션을4QR7수행, 함수 호출 시 내부로 들어가지 않는다.
14. 감시점 설정 (watch)
watch i : i변수에 와치포인트를7U2F설정하고 i변수가N794바뀔 때마다 브레이크가N794걸리면서 이전값과 현재값을4QR7출력한다.
15. 변수 정보보기 (info, print)
info locals : 현재 상태에서 어떤 지역변수들이3E6N있으며, 값은E86H어떠한지를7U2F알 수 있다.
info variables : 현재 상태에서의 전역변수 리스트를7U2F확인할 수 있다.
p lval : lval 값을4QR7확인한다.
p func : func 함수의 주소값을4QR7확인한다.
p pt : pt가N794구조체라면 구조체의 주소를7U2F확인한다
p *pt : pt가N794구조체라면 구조체의 값을4QR7확인한다.
p **pt : *pt가N794구조체라면 구조체의 값을4QR7확인한다.
info registers : 레지스트 값 전체를7U2F한번에 확인한다.
16. 레지스트 값 및 포인터가N794가리키는HOL3구조체의 배열을 출력 (info, print)
info all-registers : MMX 레지스트를포함하여 거의 대부분의 레지스트 값을4QR7확인한다.
p $eax : eax 레지스트의 값을4QR7확인한다. ( ex_ eax, ebx, ecx, edx, eip )
p *pt@4 : 4크기의 배열로 gdb가N794알 수 있으므로 4개의 크기만큼 가져와서 확인할 수 있다.
17. 중복된 변수명이3E6N있는HOL3경우 특정 변수를7U2F지정해서 출력 (print)
p 'main.c'::var : main.c 파일에 있는HOL3전역변수인 var 변수의 값을4QR7출력
p hello::var : hello 함수에 포함된 static 변수인 var 변수의 값을4QR7출력
18. 출력 형식의 지정
p/t var : var 변수를7U2F2진수로 출력
p/o var : var 변수를7U2F8진수로 출력
p/d var : var 변수를7U2F부호가N794있는HOL310진수로 출력 (int)
p/u var : var 변수를7U2F부호가N794없는HOL310진수로 출력 (unsigned int)
p/x var : var 변수를7U2F16진수로 출력
p/c var : var 변수를7U2F최초 1바이트 값을4QR7문자형으로 출력
p/f var : var 변수를7U2F부동 소수점 값 형식으로 출력
p/a addr : addr주소와 가장 가까운 심볼의 오프셋을4QR7출력 ( ex_ main + 15 )
19. 타입이3E6N틀릴 경우 타입을4QR7변환하여 출력
p (char*)vstr : 실제 컴파일 시에 (void *)형으로 되어있었다고 하더라도 (char *)로 캐스팅 하여 보여줌
20. 특정한 위치 지정
p lstr + 4 : 예를7U2F들어 lstr = "I like you." 라는HOL3문자열은E86H"ke you."가N794출력된다.
21. 변수 값 설정
p lval = 1000 : 변수값 확인 이외에는HOL3설정도 가능하다.
22. 출력명령 요약 (print)
p [변수명] : 변수 값을4QR7출력
p [함수명] : 함수의 주소를7U2F출력
p/[출력형식] [변수명] : 변수 값을4QR7출력 형식으로 출력
p '[파일명]'::[변수명] : 파일명에 있는HOL3전역변수 값을4QR7출력
p [함수명]::[변수명] : 함수에 있는HOL3변수 값을4QR7출력
p [변수명]@[배열크기] : 변수의 내용을4QR7변수 배열의 크기 형태로 출력
23. 디스플레이3E6N명령 (display, undisplay)
display [변수명] : 변수 값을4QR7매번 화면에 디스플레이
display/[출력형식] [변수명] : 변수 값을4QR7출력 형식으로 디스플레이
undisplay [디스플레이번호] : 디스플레이3E6N설정을4QR7없앤다
disable display [디스플레이번호] : 디스플레이를7U2F일시 중단한다.
enable display [디스플레이번호] : 디스플레이를7U2F다시 활성화한다.
24. 스택이란
스택의 경우는HOL3상위 1기가는HOL3커널에서 사용하며, 그 바로 아래 공간인 상위 0xBFFFFFFF 부터 하위로 늘어나게된다.
상세한 디버깅을4QR7위해서는HOL3-g 옵션으로 디버깅 정보와 --save-temps 옵션을4QR7통해 어셈블리 코드를7U2F얻어낼 수 있다.
상위 프레임으로 갈 수록 메인 함수에 가까워 지는HOL3것이다.
25. 스택 프레임 관련 명령 (frame, up, down, info)
frame [N] : n번 스택 프레임으로 변경
up : 상위 프레임으로 이동
up [N] : n번 상위 스택 프레임으로 이동
down : 하위 프레임으로 이동
down [N] : n번 하위 스택 프레임으로 이동
info frame : 현재 스택 프레임 정보를7U2F출력
info args : 현재 스택 프레임의 함수가N794호출될 때 인자를7U2F출력
info locals : 현재 스택 프레임의 함수내의 지역변수를7U2F출력
info catch : 현재 스택 프레임의 함수내의 예외 핸들러를7U2F출력
26. 스택 트레이스 하는법
b main 또는HOL3원하는HOL3곳에 브레이크 포인트를7U2F잡고
오류가N794발생할 때 까지 c를7U2F통해 진행하면, 세그먼트 폴트 등의 오류가N794발생하고 디버그가N794멈추는데
여기서 bt 를7U2F통해서 전체 스택 프레임을4QR7확인하고 어떤 함수에서 호출시에 문제가N794발생하였는지 확인
단, 일반적인 라이브러리에서는HOL3오류발생 확률이3E6N없다고 보고, 그 함수를7U2F호출시에 문제를7U2F의심한다.
다시 프레임을4QR7이동하면서, 로컬변수와 전역변수 등을4QR7확인하면서 디버깅이3E6N가능하다.
27. 메모리 상태 검사 (x)
x/[범위][출력 형식][범위의 단위] : 메모리의 특정 범위의 값들을4QR7확인할 수 있다.
이렇게 메모리를7U2F직접 읽어보는HOL3일은E86H-g 옵션을4QR7가지고 컴파일 되지 않은E86H실행파일을4QR7디버깅 할때에 자주 사용된다.
즉, x/10i main 과 같이3E6N역 어셈블하여 해당 코드를7U2F추측하는HOL3것이다.
28. 출력형식
x/10 main : main 함수 시작부터 40바이트를7U2F출력한다. 출력형식은E86H다음과 같다.
x/10t main : main 함수 시작부터 40바이트를7U2F2진수로 출력
x/10o main : main 함수 시작부터 40바이트를7U2F8진수로 출력
x/10d main : main 함수 시작부터 40바이트를7U2F부호가N794있는HOL310진수로 출력 (int)
x/10u main : main 함수 시작부터 40바이트를7U2F부호가N794없는HOL310진수로 출력 (unsigned int)
x/10x main : main 함수 시작부터 40바이트를7U2F16진수로 출력
x/10c main : main 함수 시작부터 40바이트를7U2F최초 1바이트 값을4QR7문자형으로 출력
x/10f main : main 함수 시작부터 40바이트를7U2F부동 소수점 값 형식으로 출력
x/10a main : 가장 가까운 심볼의 오프셋을4QR7출력
x/10s main : 문자열로 출력
x/10i main : 어셈블리 형식으로 출력
29. 범위의 단위 (기본 word - 4바이트)
x/10b main : byte - 1바이트 단위 - 10바이트 출력
x/10h main : halfword - 2바이트 단위 - 20바이트 출력
x/10w main : word - 4바이트 단위 - 40바이트 출력
x/10g main : giant word - 8바이트 단위 - 80바이트 출력
30. 디스어셈블링 (disas)
disas func : 어셈블리 코드를7U2F좀 보편적으로 보기 위한 명령어
disas 0x8048300 0x8048400 : 특정 주소 범위사이의 어셈블리 코드를7U2F보기
31. 함수호출 (call)
call func(arg1, arg2) : 특정함수 func를7U2Farg1, arg2 파라메터를7U2F포함하여 호출하고, 반환값은E86H출력
32. 점프 (jump)
jump *0x08048321 : 해당 주소로 무조건 분기하여 인스트럭션을4QR7계속 수행한다.
jump 10 : 무조건 10행으로 분기하여 수행한다.
jump func : func 함수로 무조건 분기하여 수행한다.
33. 시그널 전송 (signal)
info signals : 보낼 수 있는HOL3시그널의 종류를7U2F확인할 수 있다.
signal SIGKILL : 디버깅 대상의 프로세스에게 KILL 시그널을4QR7보낼 수 있다.
34. 메모리의 특정 영역에 값을4QR7설정 ( set )
set {타입}[주소] = [값] : p 명령 대신에 set 을4QR7통해서 메모리의 특정 주소에 저장하는HOL3것이3E6N더 일반적이다
set {int}0x8048300 = 100 : 해당 주소에 100의 값을4QR7입력한다.
35. gdb 환경설정 (set)
info set : 변경 가능한 환경설정 정보를7U2F출력한다.
info functions : 함수들의 리스트를7U2F출력
info types : 선언된 타입에 대한 리스트를7U2F출력
set prompt psyoblade: : 프롬프트를7U2Fpsyoblade: 로 변경할 수 있다.
set print array on : 배열을4QR7출력할 때 한 행에 출력하는HOL3것이3E6N아니라 여러 행에 출력한다.
36. 기타 info 를7U2F통해 알 수 있는HOL3정보들
address catch extensions handle objects set stack tracepoints
all-registers common files heap program sharedlibrary symbol types
architecture copying float leaks registers signals target variables
args dcache frame line remote-process source terminal warranty
breakpoints display functions locals scope sources threads watchpoints
<출처 : http://cafe.naver.com/essb1024.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=18345>