gdb-qemu: não é possível colocar break point na função kernel (kernel 4.10.0-35)

0

Estou tentando depurar o kernel do Ubuntu usando o KDB + qemu. No entanto, não consigo depurá-lo. A seguir está o erro que estou recebendo. Alguém pode ajudar?

Iniciando o 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

Como iniciar o depurador:

sudo gdb ./debian/build/build-generic/vmlinux -iex 'add-auto-load-safe-path .'  -ex 'target remote localhost:1234'

Definindo o ponto de interrupção:

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 

O que estou fazendo de errado aqui?

    
por aMa 13.10.2017 / 10:43

1 resposta

0

Verifique se você desativou KASLR (aleatorização do layout do espaço de endereço do Kernel) ou use add-symbol-file para adicionar o arquivo de símbolo do kernel ao invés do arquivo, para que você possa especificar manualmente .text .data e .bss.

% bl0ck_qu0te%

Para desativar o KASLR , anexe o parâmetro "nokaslr" ao arquivo GRUB_CMDLINE_LINUX_DEFAULT in /etc/default/grub e atualize-o-grub. por exemplo,

$ grep "GRUB_CMDLINE_LINUX_DEFAULT" /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="nokaslr"
$ update-grub && reboot
    
por avg598 05.03.2018 / 15:59