gdb 명령어정리

동동이·2022년 7월 4일
1
post-thumbnail

개요

gdb란 리눅스의 대표적인 디버거이다. gdb에는 프로그램을 분석하기위해 어셈블리어단에서의 분석과 함께 디스어셈블링도 수행할 수 있다.
일단 리눅스에서 gdb를 실행하려면 gcc로 오브젝트 파일을 만들어서

gdb debugee

이런식으로 실행해야 한다
(명령어 옆에있는 괄호는 축약어이다)

start

start 명령어는 ELF에도 있는 프로그램 진입점부터 프로그램을 분석할 수 있게 해주는 명령어이다. 자동으로 진입점 주소에 브레이크 포인트를 설정한다

run(r)

start 명령어와 똑같지만 run 명령어는 진입점부터 들어가지도 않고, 브레이크 포인트도 설정해주지 않는다. 그저 실행만 해준다.

break(b)

브레이크 포인트를 설정해주는 명령어이다. 보통 사용할때에는 main함수 앞에 브레이크 포인트를 걸때가 많다.

b *main

continue(c)

break로 멈춰진 프로그램을 다시 동작시키는 명령어이다.

disassemble

disassemble 함수이름

함수를 인자로 받아 함수가 반환될때까지 디스어셈블링 해준다.

ni,si

관찰하는 함수의 중단점에 도달하면, 그 다음 부턴 코드를 한줄한줄 실행시켜봐야한다. 이때 사용하는 명령어가 ni,si가 있다. 그러나 ni는 call과 같이 서브루틴을 호출하는 함수에는 들어가지 않지만 si는 서브루틴에도 들어간다

examine

프로그램을 분석하다보면 가상 메모리에 존재하는 값을 봐야할때가 생기는데, 이때 사용하는 명령어가 x라는 커맨드이다.

포맷옵션설명
ooctal(8진수)
xhex(16진수)
ddicimal(10진수)
tbinary(2진수)
uunsigned decimal
ffloat(실수)
aaddress(주소)
iinstruction(명령어)
cchar
sstring
zhex(zero padded on the left)

사이즈옵션설명
bbyte
wword(4byte)
hhalf word(2byte)
ggiant(8byte)

참고로 명령어 기본형식은

x/[반복횟수][포맷옵션][사이즈옵션] 주소

이렇다

이제 예를 들어보자

먼저 rsp부터 8바이트씩 10번 16진수 값을 출력하고 싶다면

이렇게 쓴다.

그럼 이번엔 rip부터 8개의 명령어를 출력해보자

profile
보안 공부하는 사람

0개의 댓글