disassemble은 gdb가 기본적으로 제공하는 디스어셈블 명령어, 아래와 같이 해당 함수를 인자로 전달하면 해당 함수가 반환될 때 까지 전부 디스어셈블 하여 보여줌
u, nearpc, pdisas는 pwndbg에서 제공하는 디스어셈블 명령어, 가독성 좋게 출력해줌
그냥 nearpc main 명령어를 입력하니 오류 발생, github 찾아보니 nearpc &main 명령으로 해결 가능
ni와 si의 차이점은 ni는 서브루틴으로 들어가지 않지만 si는 서브루틴으로 들어가는 차이점이 있음
printf 경우 문자열은 stdout의 버퍼에서 잠시 대기한 뒤 출력되기 때문에 gdb로 printf를 실행해도 출력되는 조건은 다음과 같다.
프로그램이 종료될 때
버퍼가 가득 찼을 때
fflush와 같은 함수로 버퍼를 비우도록 명시했을 때
개행문자가 버퍼에 들어왔을 때
finish 명령어는 함수의 끝까지 한 번에 실행할 수 있음
si로 함수의 내부에서 분석했을 때, 함수의 규모가 너무 커서 돌아가기 어려울 때 사용할 수 있음
examine
가상 메모리에 존재하는 임의 주소의 값을 관찰할 때, gdb에서는 x라는 명령어 사용 가능
x를 이용하면 특정 주소에서 원하는 길이만큼 데이터를 원하는 형식으로 인코딩하여 볼 수 있음
o(octal), x(hex), d(decimal), u(unsigned decimal), t(binary), f(float), a(address), i(instruction), c(char), s(string) and z(hex, zero padded on the left).
b(byte), h(halfword), w(word), g(giant, 8 bytes)
아래는 8바이트씩 hex인 16진수 형식으로 10개를 보여주는 명령어
rip부터 5줄의 어셈블리 명령어
특정 주소의 문자열 출력
telescope
telescope는 pwndbg가 제공하는 강력한 메모리 덤프 기능
특정 주소의 메모 값들을 보여주는 것에서 그치지 않고, 메모리가 참조하고 있는 주소를 재귀적으로 탐색하여 값을 보여줌
tele &main 명령도 가능
vmmap
vmmap은 가상 메모리의 레이아웃을 보여줌
어떤 파일이 매핑 된 영역일 경우, 해당 파일의 경로까지 보여줌
gdb / python
gdb를 사용하여 디버깅을 할 때 키보드로 직접 타이핑하기 어려운 복잡한 값을 입력하고 싶을 때 사용할 수 있음
댓글남기기