gdb(디버거) 사용법에 대한 조사.
[시스템 해킹] gdb(디버거) 사용방법
GDB?
GDB는 GNU Debugger의 약자로 Console debugger이다. 먼저 디버깅을 수행하기 위해서는 소스코드를 컴파일할 때
디버깅 정보를 포함하도록 해야한다. gcc에서 이에 해당하는 옵션은 -g 이다.
Windows
- OllyDBG
Linux
- GDB
사용방법
ㄱ)
$ gdb a.out (gdb -q a.out)
따로 설정 하지 않으면 AT&T기반의 소스코드 사용
(gdb) set dis intel
Intel 기반으로 변경 가능
ㄴ)
(gdb) disassemble main
메인함수 검색
(gdb) break *주소값
Break Point 설정
(gdb) delete 번호
B.P 삭제
ㄷ)
(gdb) Run
프로그램 실행(자동으로 첫 번째 B.P에 멈춘다)
(gdb) continue
이어서 실행
ㄹ)
(gdb) info breakpoints
설정 되어 있는 B.P 확인
(gdb) info registers
레지스터에 저장된 값 확인
ㅁ)
(gdb) x/d
(gdb) x/x
(gdb) x/s
해당 주소값에 들어있는 값을 원하는 타입으로 출력
gdb 실행상황에서 1은 소스를 출력해주는 명령이다. Enter를치면 다음 라인의 소스가 출력이 된다.
1 |
main 함수를 기점으로 소스 출력 |
1 10 |
10 행을 기준으로 출력 |
1 func |
func 함수의 소스를 출력 |
1 - |
출력된 행의 이전 행을 출력 |
1 file.c:func |
file.c 파일의 func 함수 부분을 출력 |
1 file.c:10 |
file.c 파일의 10행을 기준으로 출력 |
set listsize 20 |
출력 행이 10행에서 20행으로 증가 |
BreakPoint 명령
b func |
func 심볼의 시작 부분에 BreakPoint 설정 |
b 10 |
10 행에 BreakPoint 설정 |
b file.c:func |
file.c 파일의 func Symbol에 BreakPoint 설정 |
b file.c:10 |
file.c 파일의 10행에 BreakPoint 설정 |
b +2 |
현재 행에서 2개 행 이후 지점에 BreakPoint 설정 |
b -2 |
현재 행에서 2개 행 이전 지점에 BreakPoint 설정 |
b *0x8049000 |
0x8049000 주소에 BreakPoint 설정(Assembly로 디버깅시 사용) |
b 10 if var == 0 |
10행에 BreakPoint를 설정하는데, var변수의 값이 0일 때 작동 |
rb fun* |
*fun* 에 해당하는 모든 Symbol에 BreakPoint 설정 |
rb ^fun |
fun으로 시작하는 모든 Symbol에 BreakPoint 설정 |
rb TestClass:: |
TestClass에 해당하는 모든 Symbol에 BreakPoint 설정 |
c1 func |
func 함수의 시작 부분에 BreakPoint 제거 |
c1 10 |
10 행의 BreakPoint 제거 |
c1 file.c:func |
file.c 파일의 func 함수에 BreakPoint 제거 |
c1 file.c:10 |
file.c 파일의 10행에 있는 BreakPoint 제거 |
d |
모든 BreakPoint 제거 |
disable br |
모든 BreakPoint 비활성화 |
disable br 1 3 |
1번, 3번 BreakPoint 비활성화 |
enable br |
모든 BreakPoint 활성화 |
enable br once 1 |
1번 BreakPoint 활성화 하고, 한 번만 걸리고 비활성화 설정 |
enable br delete 1 |
1번 BreakPoint 활성화하고, 한 번만 걸리고 제거 |
Information
명령 |
설명 |
i b |
등록된 BreakPoints와 watchpoints를 출력 |
i line |
현재 디버깅하고 있는 위치 정보를 출력 |
i program |
현재 프로그램의 process 정보를 출력 |
i args |
현재 함수로 넘어온 인자의 정보를 출력 |
i locals |
현재 함수의 지역 변수를 출력 |
프로그램에 인자를 넣고 실행 & 종료
r |
프로그램 실행 |
r arg1 arg2 |
arg1과 arg2를 인자로 프로그램 실행 |
k |
프로그램 실행 종료 |
'Learning > └◆Reversing' 카테고리의 다른 글
03_level2 -> level3[FTZ] vi 편집기 백도어 (0) | 2017.01.19 |
---|---|
[실습] C언어 코드와 어셈블리 언어 코드 테이블 제작 (0) | 2017.01.19 |
[참고]어셈블리 예제 (0) | 2017.01.19 |
[참고]어셈블리어의 기본 문법과 명령 (0) | 2017.01.19 |