===========================================================================
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 |