kernel gef shortcut
커널에서는 ‣ 을 자주쓰기에 이 전용 gdb를 위한 shortcut을 만들어보았다.
basic
| 중요도 | 명령어 | 뭐 해줌 | 언제 쓰나 |
|---|---|---|---|
| ⭐⭐⭐ | kbase | 커널 베이스 주소(KASLR base) 출력 | KASLR 잡혔는지/베이스 필요할 때 |
| ⭐⭐⭐ | kcurrent | current task 주소(현재 태스크) 출력 | 지금 실행 중 태스크(task_struct) 잡을 때 |
| ⭐⭐⭐ | ktask | 태스크 리스트 + 주요 오프셋/필드(cred, comm 등)까지 뽑아줌 | cred/comm/stack 오프셋 확인, current 검증할 때 |
| ⭐⭐⭐ | kvmmap | 커널 가상주소 맵(physmap/vmalloc/module 등) 출력 | 주소가 어디 영역인지 분류할 때 |
| ⭐⭐⭐ | ksymaddr-remote | kallsyms를 “메모리 스캔”으로 복원/조회 | vmlinux 심볼 없을 때 함수/심볼 주소 찾을 때 |
| ⭐⭐⭐ | ksymaddr-remote-apply | 위에서 얻은 심볼을 GDB에 적용(pseudo ELF) | 이후부터 b commit_creds 같은 심볼 브레이크가 쉬워짐 |
| ⭐⭐☆ | kchecksec | 커널 보안 옵션(보호기법) 체크 | SMEP/SMAP/PTI/KASLR 등 환경 정리할 때 |
| ⭐⭐☆ | kmagic | 커널에서 유용한 주소들 모음 출력 | “뭐가 어디 있지?” 할 때 빠른 지도 |
| ⭐⭐☆ | kcmdline | 부팅 cmdline 출력 | kaslr, pti, panic_on_warn 같은 옵션 확인 |
| ⭐⭐☆ | kversion | 커널 버전 출력 | 익스/오프셋/기법 갈라질 때 기준점 |
| ⭐⭐☆ | kconfig | 커널 config 덤프(가능하면) | BTF/SLUB/하드닝 옵션 확인 |
struct & table
| 명령어 | 뭐 해줌 |
|---|---|
| ktask | 태스크 목록 + task_struct 주요 오프셋(cred/comm/pid/stack 등) + (옵션에 따라) 유저 프로세스 mm/레지스터/FD/시그널/네임스페이스/seccomp까지 |
| syscall-table-view | syscall table 보기(ia32/x32/compat 등도) |
| ksysctl | sysctl 파라미터 덤프 |
| kdmesg | dmesg ring buffer 덤프 |
| kpipe | pipe 정보 표시 |
| kipcs | SysV IPC(sem/msg/shm) 덤프 |
page
| 명령어 | 뭐 해줌 | 메모 |
|---|---|---|
| v2p / p2v | 가상주소↔물리주소 변환 보여줌 | physmap/PA 추적할 때 |
| xp | 물리 메모리 덤프(shortcut) | “PA 기준”으로 보고 싶을 때 |
| page + (virt2page,page2virt,phys2page,page2phys) | struct page ↔ VA/PA 변환 | 슬랩/페이지 구조 추적할 때 |
heap
| 명령어 | 뭐 해줌 | 언제 씀 |
|---|---|---|
| slub-dump | SLUB freelist 덤프 (no-symbol+kASLR에서도 지원) | UAF로 freelist/재할당 흐름 볼 때 |
| slab-dump | SLAB freelist 덤프 | SLAB 구성일 때 |
| slob-dump | SLOB freelist 덤프 | 초경량 할당자일 때 |
| slub-tiny-dump | SLUB-TINY freelist 덤프 | tiny 구성일 때 |
| slab-contains | “이 주소가 어느 kmem_cache 소속인지” 추정 | 객체 주소만 있고 cache 모를 때 |
| kmem-cache-alias | kmem_cache alias 이름 덤프 | kmalloc-* 매핑 확인할 때 |
| buddy-dump | buddy allocator free-list 덤프 | page allocator 상태/오더 확인 |
| vmalloc-dump | vmalloc used/freed 리스트 덤프 | vmalloc 영역 흔적/해제 추적 |
| slab-virtual | slab-meta ↔ slab-data 변환 (CONFIG_SLAB_VIRTUAL) | (해당 옵션일 때) 메타/데이터 대응 |
| highmem-dump | HighMem 매핑 덤프 | highmem 관련 분석 |
module
| 명령어 | 뭐 해줌 |
|---|---|
| kmod | 모듈 주소/심볼 표시 |
| kload | vmlinux를 “로드 주소 없이” 로드 (debuginfo 있을 때 유용) |
| kmod-load | 커널 모듈을 “로드 주소 없이” 로드 (debuginfo 있을 때) |
| kcdev | char device 정보 덤프 |
| kbdev | block device 정보 덤프 |
| kfilesystems | 지원 파일시스템 목록 |
| kclock-source | clocksource 리스트 |
| kbpf | BPF 정보 덤프 |
| ktimer | timer 덤프 |
| kpcidev | PCI 디바이스 덤프 |
| kdevio | I/O-port / I/O-memory 정보 |
| kdmabuf | DMA-BUF 정보 |
| kirq | IRQ 정보 |
| knetdev | 네트워크 디바이스 표시 |
tracing
| 명령어 | 뭐 해줌 | 포인트 |
|---|---|---|
| ksearch-code-ptr | 커널 data 영역에서 코드 포인터 탐색 | 누수 포인터/함수포인터 흔적 찾을 때 |
| thunk-tracer | 자동 호출되는 thunk 함수 주소 수집 | RIP/제어흐름 힌트 |
| usermodehelper-tracer | call_usermodehelper_setup 실행 정보 수집 | modprobe/usermodehelper 흐름 확인 |
| kmalloc-tracer | kmalloc/kfree 이벤트 수집/표시 | 힙 레이아웃/재할당 타이밍 |
| kmalloc-allocated-by | 특정 syscall 세트 실행 후 kmalloc/kfree된 구조체 출력 | “어떤 syscall이 어떤 구조체 만들지” |
| ktrace | 커널 함수/인자 트레이스 | 함수 호출 흐름 관찰 |
QEMU 모니터/레지스터/CPU 관련
| 명령어 | 뭐 해줌 |
|---|---|
| qreg | qemu-monitor로 레지스터 보여줌(예: qemu 2.x에서 $cs 같은 것) |
| msr | MSR read/write (동적 asm 실행) |
| cet | Intel CET 설정 표시 |