我正在尝试使用 qemu 和 gdb 调试 Linux 内核。问题是 gdb 不会在断点处停止。我搜索了一下,发现关闭 kASLR 可能会有所帮助,因为 kASLR 会混淆 gdb。
-- 在客户机上安装该内核。
+- 在来宾上安装该内核,通过在内核命令行中添加“nokaslr”来关闭 KASLR。
不幸的是,我不知道将 nokaslr 添加到命令行意味着什么以及执行此操作的方法。任何想法,将不胜感激。
答案1
qemu-system-x86_64 -append nokaslr
如果您使用 QEMU 本身来加载内核-kernel
,而不是在磁盘映像中使用引导加载程序,则可以采用这种方法,就像使用 Ubuntu ISO 安装程序一样。
Linuxnokasrl
命令行参数禁用 KASRL。
从 v4.12 开始就需要这样做,当时 KASLR 默认打开。
这里有一个高度自动化的 Buildroot 示例使用它的。
答案2
内核启动参数可以在每次启动时临时设置,也可以始终通过某些配置文件进行设置;如何完成此操作取决于引导加载程序,当前版本的 Ubuntu 是 grub2;
$ grep GRUB_CMDLINE_LINUX_DEFAULT /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
$ sudo perl -i -pe 'm/quiet/ and s//quiet nokaslr/' /etc/default/grub
$ grep quiet /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet nokaslr"
$ sudo update-grub
然后重新启动;在 grub 菜单中确认参数按预期显示。