【kernel】内核本地调试入门

提取vmlinux

使用extract-vmlinux脚本提取,脚本下载地址:linux/extract-vmlinux at master · torvalds/linux (github.com)

./extract-vmlinux ./bzImage > vmlinux

开放调试端口

boot.sh中加入如下参数

-gdb tcp::[port]
#如下
-gdb tcp::1234

启动boot.sh

调试

  • root权限下运行
gdb ./vmlinux -q
  • 导入符号表
add-symbol-file ./fs/lib/modules/4.4.72/babydriver.ko 0xffffffffc0000000
#第一个参数为符号表地址 第二个参数为kernel基址 
#在开启kaslr时,kernel基址不固定,可在qemu的-append参数中增添‘kaslr’

地址可以在文件系统中使用cat /proc/modules查看

  • 连接端口
target remote 127.0.0.1:1234

然后在其中下好断点便可以开始调试

image-20230331205128408