layer 24과제 gdb 간단 사용법

2019. 11. 17. 16:22layer7

gdb는 linux에서 사용되는 디버깅 툴 입니다.

linux에서 이 툴을 이용해서 디버깅을 좀 더 수월하게 진행할 수 있습니다.

01. gdb를 사용합시다.

 

가장 일반적으로 사용됩니다.

 

1, 2번을 간단히 설명하자면

1번 사용법은 gdb를 사용하여 프로그램을 실행시켜

디버깅하는 방법으로 윈도우 디버깅을 사용하는 방법과 유사합니다.

 

2번 사용법은 프로그램이 비정상 종료할 때 코어 파일을 만들게 설정한 경우, 해당 코어

파일을 확인하여 종료된 원인을 파악할 때 사용하는 방법입니다.

참고로, 코어 파일을 만들도록 했는지 확인하는 방법과 설정 방법은 다음과 같습니다.

 

02. gdb 명령어

여기서는 비교적 자주 사용하는 명령어만 기술하도록 하겠습니다.

 

run(r)

: 프로그램을 시작합니다. 이때, 인자값(argument)을 포합 할 수도 있습니다.

 또한, '<', '>', '<<', '>>'와 같은 입출력 방향 재지정 기호는 물론 쉘의 사용까지도

 확장 사용할 수 있습니다.

quit(q)

: 프로그램을 종료합니다.

 

break(b)

: 중단점을 설정합니다.

b <function>/file:funtion/ file:line number/ *memory address

 

info

: 각종 정볼르 디스플레이 합니다. 더욱 자세한 정보는 help를 통해 학인 할 수 있습니다.

 

condition

: 브레이크 포인트에 조건을 설정합니다.

 

enable/disable

 

gdb -q 혹은 --quiet 옵션을 주면 gdb를 시작할 때 버전 정보 등을 출력하지 않도록 한다.

 

 

특정 메모리에 원하는 값 넣기

Set {타입}[주소 or 레지스터] = [값] 형식으로 작성되며, 예는 다음과 같습니다.

ex. Set {int}0x8040000=123

    Set {int}$edx=123

 

메모리 상태 검사

x/[범위][출력 형식][범위의 단위] 형식으로 메모리의 특정 범위를 검사할 수 있습니다.

이때 , [범위]의 기본 단위는 word로 4바이트 입니다.

b(1바이트), h(2바이트), w(4바이트), g(8바이트)의 단위로 지정할 수 있습니다.

 

출력형식: x(16진수), s(문자열), I(명령어)

Ex)

낮은 주소 쪽으로 메모리를 보려면

x/10wx $esp-0x40와 같이 하면 된다.

backtrace (bt)

프로그램의 스텍을 보여줍니다.