2017-09-06 50 views
0

我正試圖理解內核網絡堆棧,以便爲我的大學進行安全研究。這就是爲什麼我嘗試調試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永遠不會停在那裏。 有沒有人有一個想法如何解決這個問題?

謝謝!

此致

回答

0

老實說,我沒有膠水爲什麼但是從我的Makefile刪除--enable-kvm幫助,使其能工作。我希望這可以幫助其他人。