内核调试-gdb步骤跳出功能

问题描述:

我正试图理解内核网络堆栈,以便为我的大学进行安全研究。这就是为什么我尝试调试Linux内核的原因。内核调试-gdb步骤跳出功能

到目前为止,我的表现相当不错,但在尝试使用qemu和gdb进行调试时遇到了问题。

的问题如下:

我启动我的linux系统:使开机

boot: 
     @qemu-system-x86_64 \ 
      -kernel ${KERNEL_IMAGE} \ 
      -drive file=${DRIVE_IMAGE},index=0,media=disk,format=raw \ 
      -append "root=/dev/sda rw console=ttyS0 nokaslr gdbwait" \ 
      -m ${RAM} \ 
      --nographic \ 
      --enable-kvm \ 
      -s 

而且使用gdb连线:请调试

debug: 
    @gdb -iex "target remote localhost:1234" ${KERNEL_DIRECTORY}/vmlinux 

我设置一个断点,例如在icmp_rcv继续

b icmp_rcv 
Breakpoint 1 at 0xffffffff81808910: file net/ipv4/icmp.c, line 989. 
c 

知道我平安自己 - >断点命中:

Breakpoint 1, icmp_rcv (skb=0xffff88007c24ee00) at net/ipv4/icmp.c:989 

大到目前为止一切都按预期。 知道我按N/S(next或step),并代替净/的IPv4/icmp.c:990 它说:

native_apic_mem_write (reg=896, v=52414) at ./arch/x86/include/asm/apic.h:99 

知道我按n键,直到我回来icmp_rcv:989。 我试图设置一个断点到icmp_rcv_990,但gdb永远不会停在那里。 有没有人有一个想法如何解决这个问题?

谢谢!

此致

老实说,我没有胶水为什么但是从我的Makefile删除--enable-kvm帮助,使其能工作。我希望这可以帮助其他人。