大学のセキュリティ研究のためにカーネルネットワークスタックを理解しようとしています。だから私はLinuxカーネルをデバッグしようとしています。カーネルのデバッグ - gdbのステップが関数から外れる
これまではかなりうまくやっていましたが、デバッグにqemuとgdbを使用しようとすると問題が発生しました。
次のような問題がある:
私は私のLinuxシステムをブートします。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
は、私は自分自身をping知っ続ける - >ブレークポイントのヒットは:予想通り
Breakpoint 1, icmp_rcv (skb=0xffff88007c24ee00) at net/ipv4/icmp.c:989
グレートこれまでのところ、すべてが働きました。 は、I /秒(次またはステップ)、代わりにネット/ IPv4の/ icmp.cのNを押し知っている:990 それは言う:989:
native_apic_mem_write (reg=896, v=52414) at ./arch/x86/include/asm/apic.h:99
私はicmp_rcvに戻ってくるまで、私は、nを押し知っています。 icmp_rcv_990にブレークポイントを設定しようとしましたが、gdbは決してそこで停止しません。 誰にもこの問題を解決する方法がありますか?
ありがとうございました!
ユアーズ