리눅스 커널 디버깅
./run -d
start_kernel 부트 시퀀스와 같은 심볼에서 직접 접근
./rungdb start_kernel
QEMU 정지, GDB 명령어 사용 활성화:
l
n
c
부팅 건너 뛰려면 다음 실행.
./rungdb
gdm 모드 정지 ctrl + c
QEMU 내부 스크립트 테스트
./count.sh
stdout 무한대 계산, GDB 다음과 같이 계산됨.
Ctrl + C
break sys_write
continue
continue
continue
커널 모듈 디버깅
./run -d
./rungdb
QEMU 모드 진입:
insmod /fops.ko
정지 CTRL + C
scanning for modules in ../kernel_module-1.0/
loading @0xffffffffa0000000: ../kernel_module-1.0//fops.ko
간단한 심볼
b fop_write
c
QEMU 모드 진입:
printf a >/sys/kernel/debug/lkmc_fops/f
GDB 브레이크 포인트 fop_write 지정
rmmod 하기 전 브레이크 포인트 해제, 그렇지 않으면 브레이크 포이트 정보 가지고 있음.
하드코어 방식의 디버깅, 별로 사용하지 않는 방식
insmod /fops.ko
cat /proc/modules
fops 2327 0 - Live 0xfffffffa00000000
모듈로드 정보 GDB 전달
Ctrl + C
add-symbol-file ../kernel_module-1.0/fops.ko 0xfffffffa00000000
커널 초기 디버그 부팅
./rungdb extract_kernel
./rungdb main
댓글 없음:
댓글 쓰기