Skip to content

Latest commit

 

History

History
133 lines (116 loc) · 4.09 KB

gdb.md

File metadata and controls

133 lines (116 loc) · 4.09 KB

GDB

The GNU Project DeBugger
GNU의 기본 디버거이다. GDB를 통해 Stack, Register, Memory등과 같은 정보를 얻을 수 있다.

GDB를 통해 프로그램이 실행되는 동안 프로그램 내에서 진행되고 있는 부분들을 알아볼 수 있다.

The Latest Version of GDB

현 시점(02.10.2020)의 최신 버전은 9.1

GDB Version : 9.1
02.08.2020

GDB 가 Support 하는 언어

  • Ada
  • Assembly
  • C
  • C++
  • D
  • Fortran
  • Go
  • Objective-C
  • OpenCL
  • Modula-2
  • Pascal
  • Rust

How to Use GDB

GDB 디버거를 사용하기 위해서는 exe 파일로 만들어 주어야 한다.

  • source 파일 자체를 GDB로 돌릴 수 없다.
  • .c, .go, .cpp 와 같은 소스파일 그대로 사용 불가.

Installation

Homebrew 가 깔려 있다면 아래의 명령어를 입력하자.

brew install gdb

FTB 서버에서 다운

Compile

gcc -g <fileName> -o <outputFileName>
  • 예를들어 factorial.c 라는 소스파일을 factorial이라는 이름으로 컴파일 하고자 한다면
gcc -g factorial.c -o factorial 

컴파일이 완료되면 outputFileName으로 이름 지어진 Unix executable file 이 생성된다.
factorial-exe

Start GDB

gdb ./<outputFileName>

Commands

list

  • list
    list <functionName>
    지정한 function의 11라인을 출력
    • list main
    // factorial 의 main function 출력의 예
    2
    3	long factorial(int);
    4
    5	// Factorial
    6	int main()
    7	{
    8	    int num;
    9	    long fact;
    10
    11	    printf("Enter a Positive Integer\n");

disas

disas <functionName>
함수를 disassemble. 해당 함수의 어셈블리 코드를 볼 수 있다.
문법은 AT&T asm 문법이다.

  • disas main
(gdb) disas main
Dump of assembler code for function main:
 0x0000000100000e40 <+0>:	push   %rbp
 0x0000000100000e41 <+1>:	mov    %rsp,%rbp
 0x0000000100000e44 <+4>:	sub    $0x20,%rsp
 0x0000000100000e48 <+8>:	movl   $0x0,-0x4(%rbp)
 0x0000000100000e4f <+15>:	lea    0xfa(%rip),%rdi        # 0x100000f50
 0x0000000100000e56 <+22>:	mov    $0x0,%al
 0x0000000100000e58 <+24>:	callq  0x100000f1e
 0x0000000100000e5d <+29>:	lea    0x106(%rip),%rdi        # 0x100000f6a
 0x0000000100000e64 <+36>:	lea    -0x8(%rbp),%rsi
 0x0000000100000e68 <+40>:	mov    %eax,-0x14(%rbp)
 0x0000000100000e6b <+43>:	mov    $0x0,%al
 0x0000000100000e6d <+45>:	callq  0x100000f24
 0x0000000100000e72 <+50>:	cmpl   $0x0,-0x8(%rbp)
 0x0000000100000e76 <+54>:	mov    %eax,-0x18(%rbp)
 0x0000000100000e79 <+57>:	jge    0x100000e95 <main+85>
 0x0000000100000e7f <+63>:	lea    0xe7(%rip),%rdi        # 0x100000f6d
 0x0000000100000e86 <+70>:	mov    $0x0,%al
 0x0000000100000e88 <+72>:	callq  0x100000f1e
 0x0000000100000e8d <+77>:	mov    %eax,-0x1c(%rbp)
 0x0000000100000e90 <+80>:	jmpq   0x100000eb9 <main+121>
 0x0000000100000e95 <+85>:	mov    -0x8(%rbp),%edi
 0x0000000100000e98 <+88>:	callq  0x100000ed0 <factorial>
 0x0000000100000e9d <+93>:	mov    %rax,-0x10(%rbp)
 0x0000000100000ea1 <+97>:	mov    -0x8(%rbp),%esi
 0x0000000100000ea4 <+100>:	mov    -0x10(%rbp),%rdx
 0x0000000100000ea8 <+104>:	lea    0xf7(%rip),%rdi        # 0x100000fa6
 0x0000000100000eaf <+111>:	mov    $0x0,%al
 0x0000000100000eb1 <+113>:	callq  0x100000f1e
 0x0000000100000eb6 <+118>:	mov    %eax,-0x20(%rbp)
 0x0000000100000eb9 <+121>:	xor    %eax,%eax
 0x0000000100000ebb <+123>:	add    $0x20,%rsp
 0x0000000100000ebf <+127>:	pop    %rbp
 0x0000000100000ec0 <+128>:	retq
End of assembler dump.

Exit GDB

GDB에서 Exit하기 위해서는 아래 명령어중 하나를 사용하면 된다.

  • 명령어 1
    q+Enter

  • 명령어 2
    quit+Enter

  • 명령어 3
    ctrl+d