ฉันไม่สามารถทำลาย GDB และ QEMU ได้

ฉันกำลังแก้ไขจุดบกพร่อง Linux Kernel (เวอร์ชันล่าสุด) โดยใช้ GDB และ QEMU

ฉันได้ตั้งค่า DEBUG_INFO เป็นใช่ในไฟล์การกำหนดค่า

นี่คือวิธีที่ฉันเรียก QEMU:

$> qemu-system-x86_64 -snapshot -m 4G -serial stdio -kernel ~/Documents/kernel/arch/x86_64/boot/bzImage -initrd ~/D\ ocuments/kernel/initrd/initrd_x86_64.gz -append "root=/dev/sda1 ignore_loglevel" -s และ GDB แน่นอน:

$> gdb vmlinux

จากนั้นภายใน gdb:

(gdb)> target remote :1234

ไม่มีอะไรน่าทึ่งเลย

มันหยุด QEMU ฉันตั้งค่าเบรกพอยท์ซึ่งดูเหมือนว่าจะทำงานได้ตามปกติ และฉันก็พิมพ์ "ดำเนินการต่อ" การดำเนินการ QEMU ดำเนินการต่อ

แต่ถึงแม้ว่าฟังก์ชั่นของฉันจะถึงแล้ว (ฉันเห็นข้อความเคอร์เนล printk ที่ฉันตั้งไว้ในฟังก์ชั่น) gdb ก็ไม่หยุด

$> qemu-system-x86_64 --version QEMU emulator version 2.12.0 (Debian 1:2.12+dfsg-3) Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers

และ

$> gdb --version GNU gdb (Debian 8.1-4) 8.1

ฉันไม่รู้ว่าจะลองทำอะไรต่อไป ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม

PS: สำหรับข้อมูล ฉันกำลังเขียนคีย์ล็อกเกอร์เป็นไดรเวอร์ Linux ดังนั้นฉันจึงลงทะเบียนตัวแจ้งเตือนแป้นพิมพ์ใหม่และนี่คือตัวแจ้งเตือนแป้นพิมพ์ที่ล้มเหลว

PS2: ฉันยังได้ลองสิ่งที่พวกเขาแนะนำที่นี่ คำถามสแต็กโอเวอร์โฟลว์เกี่ยวกับการตั้งค่าเบรกพอยต์ฮาร์ดแวร์ แทน แต่ก็ไม่ได้เปลี่ยนแปลงอะไร ปัญหาเดิม

ขอบคุณ

จูเลียน


person Julien Séveno-Piltant    schedule 06.09.2018    source แหล่งที่มา