9102年如何来调试内核

1. 背景/Background

最近在调试 CVE-2019-11477 漏洞的过程中,需要编译内核并使用 qemu 进行调试。结果发现数年前的操作步骤已不再适用,下面简单描述一下如何在 2019 年编译内核。
适用内核版本: 4.19

2. 操作流程/Procedure

2.1 编译参数/Compile Options

Makefile 里的编译参数默认 -O2 导致gdb调试出现:<optimized out>
方法1:改为 -O0 ==> 编译错误 (2019-12-04 update: 可以尝试只对单个函数进行编译优化的修饰,attribute((optimize("O0")))
方法2:改为 -O1 ==> 无效
方法3:改为 -Og ==> 使用来自LWN的 patch,对 level4_kernel_pgt 进行修改
方法4:改为 -O1 -g3 ==> 未测试

2.2 内核启动参数/Kernel Cmdline

1.请勿启用KVM / do not use KVM: -enable-kvm
2.添加内核参数 / kernel cmdline: nokaslr

2.3 如何制作一个精简的 initrd / Make an simple initrd

除了下面这种简单的制作initrd方法外,想快速获得一个可独立使用的 initrd 还可以直接借用 netboot initrd

3. 参考

发表评论

电子邮件地址不会被公开。 必填项已用*标注