Я пытаюсь отладить ядро 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
Что я делаю неправильно здесь?
Как сказал @ vg598, речь идет о KASLR, но с помощью update-grub вы обновите все, включая параметры KGDB в файле grub.cfg.
Лучший подход - вручную изменить /boot/grub/grub.conf, добавив флаг «nokaslr» до или после параметров KGDB.
Удостоверьтесь, что Вы отключили KASLR (Рандомизация расположения адресного пространства ядра) или используете добавлять-файл-символов для добавления файла символов ядра вместо файла, так, чтобы можно было вручную указать .text .data и .bss.
KASLR делают использование тяжелее путем размещения различных объектов наугад, а не зафиксированный, адреса.
Для отключения KASLR добавьте "nokaslr" параметр к GRUB_CMDLINE_LINUX_DEFAULT
в /etc/default/grub
файл и делает личинку обновления. например.
$ grep "GRUB_CMDLINE_LINUX_DEFAULT" /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="nokaslr"
$ update-grub && reboot
Как сказал avg598, рандомизация адресного пространства ядра KASLR должна быть отключена для отладки.
Быстрое решение:
nokaslr
в строку загрузки Linux. Современные загрузчики позволяют вносить временные изменения непосредственно в меню загрузчика. Активация этого в переходном режиме только во время сеанса отладки лучше для кибербезопасности вашей системы. (Например, Ubuntu Wiki по параметрам загрузки ядра, раздел «Временно добавить параметр загрузки ядра для тестирования») Альтернатива:
CONFIG_RANDOMIZE_BASE
в конфигурации ядра и перестройте ядро. (Например, если вы все равно используете специальное ядро .config
для отладки, это может быть удобнее, чем загрузочная строка ядра.)