gdb-qemu: не может поместить точку останова на функцию ядра (ядро 4.10.0-35)

Я пытаюсь отладить ядро 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 

Что я делаю неправильно здесь?

0
задан 13 October 2017 в 02:02

3 ответа

Как сказал @ vg598, речь идет о KASLR, но с помощью update-grub вы обновите все, включая параметры KGDB в файле grub.cfg.

Лучший подход - вручную изменить /boot/grub/grub.conf, добавив флаг «nokaslr» до или после параметров KGDB.

0
ответ дан 2 November 2019 в 03:17

Удостоверьтесь, что Вы отключили 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
0
ответ дан 2 November 2019 в 03:17

Как сказал avg598, рандомизация адресного пространства ядра KASLR должна быть отключена для отладки.

Быстрое решение:

Альтернатива:

  • Отключите CONFIG_RANDOMIZE_BASE в конфигурации ядра и перестройте ядро. (Например, если вы все равно используете специальное ядро ​​.config для отладки, это может быть удобнее, чем загрузочная строка ядра.)
0
ответ дан 17 April 2020 в 14:27

Другие вопросы по тегам:

Похожие вопросы: