Search Results for '기타/GDB'

2 POSTS

  1. 2012.05.22 intel 문법 gdb, objdump
  2. 2012.05.22 GDB 사용법 x 명령어

intel 문법 gdb, objdump

Posted 2012. 5. 22. 16:12

 

 

올리디버거와는 다르게GDB 는 좀 뭔가 다르다는 걸 느낄 수가 있습니다.

이유는 CPU 인데요 Unix의 경우에는 원래 AT&T 를 썼는데 리눅스가 그걸 따랐는진 잘 몰르겠으나;;

 리눅스는 그 문법을 사용하고 있습니다...

인텔 문법에 익숙한 사람들은 좀 불편할 수도 있는데 인텔로 바꿔주는 옵션이 있습니다.

먼저 objdump 의 경우 -M intel 옵션을 붙여주면 됩니다.

예를들어

objdump -M intel -d a.out 을 쓰면 OK

 

-M intel 옵션을 안붙였을 경우

 

 


확실히 차이가 보인다.

GDB 의 경우도 당연 있습니다

set disassembly-flavor intel 을 써주면 됩니다.

 


 


 

그리고 gdb가 시작할 때마다 써줘야 하면 불편하니 홈 폴더에 .gdbinit 파일을 만들어서 써넣으면 됩니다

 

 


 


 

'기타 > GDB' 카테고리의 다른 글

GDB 사용법 x 명령어  (0) 2012.05.22

GDB 사용법 x 명령어

Posted 2012. 5. 22. 16:01

gdb 에서 소스코드를 볼수 있게 하려면 gcc 컴파일시 -g 옵션을 주면 된다.

gcc -g test.c

gdb -q a.out

list

차례로 해보면 소스코드를 보면서 디버깅을 할 수 있다.

gdb 는 x 명령어를 사용해 메모리를 조사할 수 있다.

옵션으로는
o : 8진법으로 보여줌
x : 16진법으로 보여줌
u : 10진법으로 보여줌
t : 2진법으로 보여줌

b : 1 byte 단위로 보여줌(byte)
h : 2 byte 단위로 보여줌(half word)
w: 4 byte 단위로 보여줌(word) 
g : 8 byte 단위로 보여줌(giant)

i : 역어셈블된 명령어의 명령 메모리를 볼수 있음
c : ASCII 표의 바이트를 자동으로 볼 수 있다.
s : 문자 데이터의 전체 문자열을 보여준다.

쓰는 예시는
x/o $esp
x/4wx 0xbffff2a0
x/hu $ebp
x/gt $eip

x/i $eip
x/3i $eip
x/3cb 0x8048484
x/s 0x8048484

이런식으로 쓰면 된다 그리고 옵션 앞에 또 숫자를 붙일수 있다.

x/4wx 0xbffff2a0 를 보자

맨 먼저 x 는 examine 의 약자로 메모리를 조사할때 쓴다.
그리고 / 뒤에 붙는 옵션을 보면
맨 뒤부터 보면 맨 뒤의 x는 16진수 이고 그다음 w 는 4바이트로 이위치에는 몇바이트 단위로 쓸것인지 써준다.
그리고 숫자는 몇개를 보여줄지 써주면 된다.

0xbffff2a0 부터 4바이트만큼씩 보여준다.

그리고 x/s 랑 x/c 는 0x80484d0 를 보면 6c6c6548 이렇게 있는걸 봐서 ascii 코드라는걸 짐작할 수 있다.
이건 몇번 해보다 보면 보일 것이다.
쨋든 그래서 x/s 를 해보면 문자열이 나온다.
그리고 6바이트만큼 c 옵션으로 출력한 결과도 볼만 하다.

'기타 > GDB' 카테고리의 다른 글

intel 문법 gdb, objdump  (0) 2012.05.22