我正在尝试了解内核网络堆栈,以便为我的大学进行安全研究 . 这就是我尝试调试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 回答
老实说,我没有胶水为什么但是从我的Makefile中删除
--enable-kvm
有助于让它正常工作 . 我希望这有助于其他人 .