카테고리

asm (27) bootloader_x86_grub (1) C (92) compile (11) config (76) CPP (13) CSS (1) debugging (7) gimp (1) Go (1) html (1) Java (1) JavaScript (1) kernel (19) LibreOffice (3) Linux system progamming (21) MFC (1) opencv (4) OpenGL (1) PHP (1) Python (4) qemu (29) shell (3) socket (7) troubleshooting (2) ubuntu18.04 (2) windows (1)

2018/12/30

gdb tui 기반 디버깅

-g 옵션 사용 컴파일

shell> g++ source.cpp -g

tui 접근
shell> gdb a.out --tui

브레이크 포이트 위치 지정
gdb> break main
gdb> b main
gdb> b *main

실행
gdb> run
gdb> n ---> next
     enter -> 한줄씩 이동

지정한 위치로 브레이크 포인터 이동
gdb> b 30 ---> 브레이크 포인트 설정 여기서 30은 tui 줄 번호
gdb> run ---> 30 라인으로 이동
gdb> q ---> 종료

------------
shell> gdb a.out --tui

브레이크 포인트 위치지정
gdb> b main
gdb> s
gdb> run
gdb> s ---> 추적
gdb> q

테스트 바이너리 다운로드.
https://github.com/LiveOverflow/liveoverflow_youtube/blob/master/0x05_simple_crackme_intro_assembler/license_1

실행
gdb "바이너리" --tui

어셈 블리어 형식 변환
set disassembly-flavor intel

메인 함수 디어셈블
disas main

브레이크 포인트 위치 지정
b 30 30번째 라인에다가 걸기
b *main 메인 함수 브레이크 포인트
b *0x0~~~~ 특정 주소에 브레이크 포인트
b "숫자" rip로부터 상대적 위치에 브레이크 포인트

브레이크 포인트 삭제
delete
delete "번호"

실행하기
run "args" 처음부터 실행
continue 멈춘 부분부터 실행
ni -> Next instance 한 출 씩 실행

정보 확인
info reg 레지스터 확인
info reg "레지스터" 특정 레지스터 확인
info break 브레이크 포인트 확인
x/t "메모리 주소" 2진수로 확인하기
x/o "메모리 주소" 8진수로 확인하기
x/d "메모리 주소" 10진수로 확인하기
x/u "메모리 주소" 부호없는 10진수로 확인하기
x/x "메모리 주소" 16진수로 확인하기
x/c "메모리 주소" char로 확인하기
x/f "메모리 주소" 부동소수점으로 확인하기
x/s "메모리 주소" 스트링으로 확인하기

x/bx $rsp 1바이트씩 확인하기
x/hx $rsp 2바이트씩 확인하기
x/dx $rsp 4바이트씩 확인하기
x/gx $rsp 8바이트씩 확인하기

-g 옵션 사용 컴파일

shell> g++ source.cpp -g

tui 접근
shell> gdb a.out --tui

브레이크 포이트 위치 지정
gdb> break main
gdb> b main
gdb> b *main

실행
gdb> run
gdb> n ---> next
     enter -> 한줄씩 이동

지정한 위치로 브레이크 포인터 이동
gdb> b 30 ---> 브레이크 포인트 설정 여기서 30은 tui 줄 번호
gdb> run ---> 30 라인으로 이동
gdb> q ---> 종료

------------
shell> gdb a.out --tui

브레이크 포인트 위치지정
gdb> b main
gdb> s
gdb> run
gdb> s ---> 추적
gdb> q

테스트 바이너리 다운로드.
https://github.com/LiveOverflow/liveoverflow_youtube/blob/master/0x05_simple_crackme_intro_assembler/license_1

실행
gdb "바이너리" --tui

어셈 블리어 형식 변환
set disassembly-flavor intel

메인 함수 디어셈블
disas main

브레이크 포인트 위치 지정
b 30 30번째 라인에다가 걸기
b *main 메인 함수 브레이크 포인트
b *0x0~~~~ 특정 주소에 브레이크 포인트
b "숫자" rip로부터 상대적 위치에 브레이크 포인트

브레이크 포인트 삭제
delete
delete "번호"

실행하기
run "args" 처음부터 실행
continue 멈춘 부분부터 실행
ni -> Next instance 한 출 씩 실행

정보 확인
info reg 레지스터 확인
info reg "레지스터" 특정 레지스터 확인
info break 브레이크 포인트 확인
x/t "메모리 주소" 2진수로 확인하기
x/o "메모리 주소" 8진수로 확인하기
x/d "메모리 주소" 10진수로 확인하기
x/u "메모리 주소" 부호없는 10진수로 확인하기
x/x "메모리 주소" 16진수로 확인하기
x/c "메모리 주소" char로 확인하기
x/f "메모리 주소" 부동소수점으로 확인하기
x/s "메모리 주소" 스트링으로 확인하기

x/bx $rsp 1바이트씩 확인하기
x/hx $rsp 2바이트씩 확인하기
x/dx $rsp 4바이트씩 확인하기
x/gx $rsp 8바이트씩 확인하기

실행 중인 프로세스에 어태치
gdb "filename" "pid"
gdb" attach
gdb" detach

실행 중인 프로세스에 어태치
gdb "filename" "pid"
gdb" attach
gdb" detach

댓글 없음:

댓글 쓰기