Debugger/GDB 7

[GDB] 라이브러리 함수 분기에 대하여...

왜 사용자 함수는 되고 공유라이브러리? 함수 분기에 대한 disassemble은 안되는지...? 0x000104f0 : ldr r3, [pc, #92] ; 0x10554 0x000104f4 : ldr r3, [r3] 0x000104f8 : mov r0, r3 0x000104fc : bl 0x10374 막상 s를 입력하여 0x10374로 분기하면 그 다음 명령어들은 건너뛰고 printf함수로 이동되었다. gef> x/10i 0x20718 0x20718: andeq r0, r0, r0 0x2071c: andeq r0, r0, r0 gef> x/5i 0x10374 0x10374: add r12, pc, #0, 12 gef> disassemble 0x10374 No function contains specifi..

Debugger/GDB 2020.01.05

[GEF] Pattern 생성과 활용

GEF에서는 리턴 명령어가 존재하는 오프셋을 검색할 수 있도록 패턴 기능을 제공한다. - pattern create [크기] - pattern search [패턴] 하지만 꼭 개념을 정리해야 되는 것이 있다. 패턴서치는 리틀엔디안 검색과 빅엔디안 검색 둘다 출력하는데, 바이트오더로 인해 그 결과는 차이가 있다. pattern search를 해보면 혼동이 올 수 있는데, 시스템 고유 방식이 아닌 내가 검색한 엔디안 방식에 따른 오프셋을 참조하면된다. 예를 들어, Program received signal SIGSEGV, Segmentation fault. 0x61616174 in ?? () [ Legend: Modified register | Code | Heap | Stack | String ] ----..

Debugger/GDB 2020.01.04

[GCC] 컴파일시 보호기법 해재 플래그

# gcc -z execstack -o test test.c // 컴파일 시 nx 해체 # sysctl-w kernel.exec-shield=0 // nx 해체 # sysctl-w kernel.exec-shield=1 // nx 설정 # gcc -fno-stack-protector -o test test.c // ssp 해체 # gcc -mpreferred-stack-boundary=2 // dummy 값 고정 # sysctl -w kernel.randomize_va_space=0 // aslr 해체 # sysctl -w kernel.randomize_va_space=1 // stack aslr 설정 # sysctl -w kernel.randomize_va_space=2 // stack, heap asl..

Debugger/GDB 2019.12.28

[GDB] 사용법, 명령어 정리

컴파일러 디버깅 옵션 gcc -g -W -Wall -o [실행파일] [C파일] 소스 수준의 디버깅을 위한 정보를 실행파일에 포함시킨다. 디버깅 관련 리눅스 기본 명령어 file : 파일 정보 -> not stripped 출력 시 symbol을 볼 수 있다. strings : 문자열 정보 nm -D : 동적으로 남아 있는 정보 -> 프로그램이 사용하는 함수 출력(정적 라이브러리만 해당) objdump -d : 덤프따기 gdb : 디버깅 GDB 명령어 (gdb 실행 후 사용하는 명령어들) 1. 기본 설정 layout asm : 어셈블리 정보창 출력 layout reg : 레지스터 정보창 출력 set disassembly-flavor intel : 인텔 아키텍쳐로 설정 2. 프로그램 실행 r : 실행(run)..

Debugger/GDB 2019.12.28