https://github.com/pwndbg/pwndbg
설치는 간단하다.
위 사이트를 git clone 하고 pwndbg 폴더에 들어가 setup.sh 파일을 실행하면 설치가 된다.
그리고 디버그할 실행파일이 있는 곳으로 이동해서 gdb 명령어를 입력하면 pwndbg 플러그인이 덮힌 gdb가 실행된다.
이 상태에서 start 명령어를 입력해보자.
- start : 프로그램 시작점부터 분석할 수 있게 한다.
pwndbg의 화면은 크게 4 부분으로 구성되어 있다.
- [ REGISTERS ] : 레지스터 상태를 보여준다.
- [ DISASM ] : rip(명령어 포인터 레지스터)부터 디스어셈블된 결과를 보여준다.
- [ STACK ] : rsp(사용중인 스택을 가르키는 포인터)부터 스택값을 보여준다.
- [ BACKTRACE ] : 현재 rip에 도달할 때까지 어떤 함수들이 중첨되어 호출되었는지 보여준다.
- x(examine) : 메모리 주소를 관찰
→ 형식 : o(octal), x(hex), d(decimal), u(unsigned decimal), t(binary), f(float), a(address), i(instruction), c(char), s(string), z(hex, zero padded on the left)
→ 사이즈 : b(byte), h(halfword), w(word), g(giant, 8bytes)
ex.
rsp부터 word 단위로 40(0x28)바이트를 hex 형식으로 출력
> x/10wx $rsp
rsp부터 8바이트씩 80(0x50)바이트를 hex 형식으로 출력
> x/10gx $rsp
rip부터 10줄의 어셈블리 명령어 출력
> x/10i $rip
특정 주소의 문자열 출력
> x/s 0x4ffffe58
- pd : pwndbg 의 디스어셈블 명령어. 엔터를 치면 이전 명령어가 실행되서 계속 볼 수 있다.
- tele(telescope) : 메모리 덤프 기능. 특정 주소의 메모리 값을 보여주고, 메모리가 참조하는 주소를 재귀적으로 탐색해 보여줌
- vmmap : 가상 메모리의 레이아웃을 보여줌
- catch : 특정 이벤트 발생시 중단하도록 catchpoint 설정
ex.
> catch syscall arch_prctl
- cwatch(contextwatch) : 변수값 보기
'운영체제 > Linux' 카테고리의 다른 글
리눅스 커널 Kernel (0) | 2023.12.17 |
---|---|
파일 디스크립터 (0) | 2023.09.28 |
Linux ] cat 명령어, > 리다이렉션 (0) | 2022.10.10 |
Linux ] gcc -O 최적화 옵션 플래그 (0) | 2022.10.09 |
Linux ] gdb 디버거 사용법 (2) | 2022.10.09 |