Я пытаюсь отладить ядро Ubuntu с помощью KDB + qemu. Однако я не могу его отладить. Ниже приводится ошибка, которую я получаю. Может кто-нибудь помочь?
Запуск QEMU:
sudo qemu-system-x86_64 -enable-kvm -s -machine type=pc,accel=kvm -cpu host -nographic -k de -usb -m 2048 -net nic -net user,hostfwd=tcp::3389-:22 ubuntu16.04.qcow2
Запуск отладчика:
sudo gdb ./debian/build/build-generic/vmlinux -iex 'add-auto-load-safe-path .' -ex 'target remote localhost:1234'
Настройка точки останова:
gdb-peda$ b printk
Breakpoint 1 at 0xffffffff811ad8f3: file /home/test/ubuntu/linux-hwe-4.10.0/kernel/printk/printk.c, line 1864.
gdb-peda$ c
Continuing.
Warning:
Cannot insert breakpoint 1.
Cannot access memory at address 0xffffffff811ad8f3
Command aborted.
gdb-peda$ disassemble printk
Dump of assembler code for function printk:
0xffffffff811ad8f3 <+0>: Cannot access memory at address
Что я делаете неправильно здесь?
Убедитесь, что вы отключили KASLR (рандомизация макета адресного пространства ядра) или используйте файл add-symbol для добавления файла символа ядра вместо файла, чтобы вы могли вручную указать .text .data и .bss.
KASLR делает попытки более жесткими, размещая различные объекты наугад, а не фиксированные адреса.add-symbol-file , добавьте параметр «nokaslr» в GRUB_CMDLINE_LINUX_DEFAULT в файле /etc/default/grub и обновите-grub. например,
$ grep "GRUB_CMDLINE_LINUX_DEFAULT" /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="nokaslr"
$ update-grub && reboot
Убедитесь, что вы отключили KASLR (рандомизация макета адресного пространства ядра) или используйте файл add-symbol для добавления файла символа ядра вместо файла, чтобы вы могли вручную указать .text .data и .bss.
KASLR делает попытки более жесткими, размещая различные объекты наугад, а не фиксированные адреса.add-symbol-file , добавьте параметр «nokaslr» в GRUB_CMDLINE_LINUX_DEFAULT в файле /etc/default/grub и обновите-grub. например,
$ grep "GRUB_CMDLINE_LINUX_DEFAULT" /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="nokaslr"
$ update-grub && reboot