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

时间:2017-09-06 07:36:10

标签: linux gdb kernel qemu

我正在尝试了解内核网络堆栈,以便为我的大学进行安全性研究。这就是我尝试调试linux内核的原因。

到目前为止,我做得很好,但在尝试使用qemu和gdb进行调试时遇到了问题。

问题如下:

我启动我的linux系统:make boot

   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:make debug

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

知道我自己ping - >断点击中:

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

到目前为止,一切都按预期工作。 知道我按n / s(下一步或步骤)而不是net / 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永远不会停在那里。 有人知道如何解决这个问题吗?

谢谢!

此致

1 个答案:

答案 0 :(得分:1)

老实说,我没有粘合剂,但是从我的Makefile中删除--enable-kvm有助于让它正常工作。我希望这有助于其他人。