카테고리

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)

2019/01/05

GDB 커널 단계별 디버깅

GDB 단계별 디버깅

리눅스 커널 디버깅
./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

댓글 없음:

댓글 쓰기