본문 바로가기
my_lesson/_Reverse Engineering

Reverse Engineering - GDB 디버거 사용법 [리버싱 기초_01]

by boolean 2018. 11. 14.
728x90

Reverse Engineering - GDB 디버거 사용법 [리버싱 기초_01]


Operator(운영체제) 

Linux(리눅스)  - cpu(Intel)


기본코드 작성하기


GDB 디버깅 run and stop (실행과 멈춤)

~$ gdb 
(gdb) disas main
(gdb) set disassembly-flavor intel
이 설정을 해주는 것은 가독성을 높이기 위함이다.
인텔 방식의 disassemgly 언어로 보여준다.

(gdb) b *main       //main함수의 시작부분에 break point가 걸린다.
break 포인트를 생성한다.
b만 입력하고 tab을 치면 b로 시작하는 여러 명령어들을 볼 수 있다.
break입력해도 되고, b만 입력해도 된다.
만일 main함수의 8번째 라인에다 break point를 걸고 싶으면 b *main+8을 한다.
주소를 이용해서 break point를 생성할수 있다. b *0x00000000004005bd

(gdb) info b         // 지금까지 break point가 걸린 위치를 모두 보여준다.
(gdb) delete 2     // break point 중에서 2번을 지운다.
그냥 delete 하면 모든 break point를 삭제 할 수 있다.

(gdb) run    // 프로그램을 실행한다
(gdb) run test1234    // key인자가 필요할 경우
(gdb) cont    // continue 를 다 입력해도 된다.
break point를 걸어둔뒤 run을 하면 preak point가 걸리는데 다시 run을 하게되면 break point부터 이어서 시작하는 것이 아니라 프로그램 처음부터 다시 시작하게된다.  이때 continue(cont)를 하게 되면 break point부터 실행한다.

0x00000000004005bd <+0>:     push   rbp 
break point를 걸고 run을 하면 break point가 걸린 지점에 아래처럼 =>가 생긴다.
=> 0x00000000004005bd <+0>:     push   rbp 
~$ ni      //next instruction 의 약자 다음 명령어를 실행하라
명령어를 한줄씩 실행한다.
ni를 한 다음에 disas main을 해보면 =>가 다음줄울 가리키고 있음을 확인 할 수 있다.

GDB 디버깅 Information confirmation (정보 확인)

(gdb) info reg
모든 register 정보 확인
(gdb) info reg $rsp
rsp의 register 쟁보 확인

(gdb) x/t $rsp

이진수로 register rsp의 메모리 확인

(gdb) x/o $rsp

8진수로 register rsp의 메모리 확인

(gdb) x/o 0x00000000004005bd 

8진수로 메모리주소로 메모리확인

(gdb) x/d $rsp

십진수로 register rsp의 메모리 확인

(gdb) x/u $rsp

언사인 십진수로 register rsp의 메모리 확인

(gdb) x/x $rsp

십육진수로 register rsp의 메모리 확인

(gdb) x/c $rsp

문자열로 register rsp의 메모리 확인 askii value같은 것을 확인

(gdb) x/f $rsp

부동소수점으로 register rsp의 메모리 확인

(gdb) x/s $rsp

문자열로 register rsp의 메모리 확인

(gdb) x/bx $rsp

1byte 단위로 메모리 확인

(gdb) x/hx $rsp

2byte 단위로 메모리 확인

(gdb) x/wx $rsp

4byte 단위로 메모리 확인

(gdb) x/gx $rsp

8byte 단위로 메모리 확인(64bit 환경)

(gdb) x/10gx $rsp

현재 명령어 이후로 8byte 단위로 10개의 메모리 확인(64bit 환경)


GDB 디버깅 Attach (실행중인 프로세스에 붙이기)

~$ ps
~$ gdb "filename" "pid"
프로그램을 중단하면서 attach됨 
(gdb) attach
(gdb) detach
프로그램을 attach했으면 사용후 반드시 detach해줘야한다.


댓글