본문 바로가기

Linux/C

[linux] gdb 사용하기

===========================================================================

LAB> 개발환경에서 gdb 디버거를 사용해보자.


#vi gdbtest.c

#include<stdio.h>

int main()

{

int i, j; // 변수 i, j를 선언 

char buf[1024] = "Hello C";


i = 10;

j = 20;


printf("buf = %s \n", buf);

printf("i = %d, j = %d \n", i, j);


return 0;

}

-----------------------------------

사용법: x/FMT 메모리주소


help x 로 확인한다.


FMT는 반복회수,포맷,출력단위


포맷: 

  x : 16진수

  d : 10진수

  c : ASCII 문자로 표시

  s : 문자열로 표시

출력단위

b(byte) : 1byte

h(half word) : 2byte

w(word) : 4byte

g(giant byte: 8bytes) : 8byte

-----------------------------------

-실행파일안에 디버깅 정보를 포함하는 옵션(-g)를 주고 컴파일한다.

#gcc -o -g gdbtest gdbtest.c

#./gdbtest


gdb 화면에서

ctrl + l : 화면 클리어

Enter : 이전 명령 실행


x/FMT(5가지 포맷) 주소

FMT는 반복회수, 포맷, 출력단위가 표시된다.

o(octal), x(hex), d(decimal), u(unsigned decimal),

  t(binary), f(float), a(address), i(instruction), c(char) and s(string).

Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes).

 


변수 i와 j의 메모리 주소를 확인하고 그 안에 들어있는 data를 화면에 10진수 형태로 출력

(gdb) p &i

$1 = (int *) 0xbfffea1c   <---- 메모리 주소

(gdb) p &j

$2 = (int *) 0xbfffea20

(gdb) x/d 0xbfffea1c     // 해당 메모리 주소에 있는 값을 10진수 형태로 보여줄 것

0xbfffea1c: 10

(gdb) x/d 0xbfffea20

0xbfffea20: 20




***알아볼 것

OllDbg (윈도우에서 exe 파일을 디버깅하는 프로그램)

메모리구조

스택구조

해커스쿨 : http://hackerschool.org

FTZ, BOF 원정대 (워게임)




명령어 x 를 잘 봐야한다.


* linux에서 동적라이브러리를 이용해서 컴파일하는 함수

dlopen, dlsym ....


gcc : GNU C compiler Collection

c 컴파일러 : cc1  

어셈블러 : as  

링커 : ld , collect2 



'Linux > C' 카테고리의 다른 글

[linux] switch case 문  (0) 2015.05.11
[linux] 사용자 정보 구하기  (0) 2015.04.24
[linux] 라이브러리 사용하기  (0) 2015.04.16
[VS] 차량번호 분류  (1) 2011.09.19
[VS] 영문한글 글자수 세기  (0) 2011.09.19