代码之家  ›  专栏  ›  技术社区  ›  MisterPresident

内核调试-gdb步骤跳出函数

  •  2
  • MisterPresident  · 技术社区  · 7 年前

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

    问题如下:

    我引导我的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连接:进行调试

    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(下一步或步骤),而不是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\u rcv\u 990,但gdb从未停止。

    你的

    1 回复  |  直到 7 年前
        1
  •  3
  •   MisterPresident    7 年前

    老实说,我没有胶水,为什么要去掉呢 --enable-kvm 从我的Makefile帮助它工作。我希望这能帮助其他人。