คุณจะถ่ายโอนข้อมูลหน่วยความจำได้อย่างไร Bochs ?
(ทั้งแบบฟิสิคัลหรือเสมือน - แต่ ทั้งสอง จะดียิ่งขึ้น!)
คุณจะถ่ายโอนข้อมูลหน่วยความจำได้อย่างไร Bochs ?
(ทั้งแบบฟิสิคัลหรือเสมือน - แต่ ทั้งสอง จะดียิ่งขึ้น!)
คำตอบ:
ฉันรู้ว่าคำถามนี้ได้รับในขณะที่ แต่ฉันมีปัญหาเดียวกันและฉันสามารถแก้ไขได้
Bochs มาพร้อมกับดีบักเกอร์แบบเห็นภาพที่สามารถเปิดใช้งานได้ด้วยการตั้งค่าสถานะต่อไปนี้
./configure \
--enable-x86-debugger \
--enable-debugger \
--enable-debugger-gui
เมื่อคุณจะสร้างมันและเพิ่มตัวเลือกนี้ในไฟล์กำหนดค่า Bochs ของคุณ:
display_library: x, options = "gui_debug"
เมื่อเปิด debugger gui คุณสามารถกดปุ่ม "break" ได้ตลอดเวลาและในเมนู View คุณมีตัวเลือก "Physical MemDump" และ "Linear MemDump" เพียงป้อนที่อยู่เริ่มต้นและ bochs จะถ่ายโอนข้อมูลขนาด 4kB ให้คุณ
หากคุณต้องการคุณยังสามารถใช้โหมดข้อความจุดพักสามารถตั้งค่าด้วยคำสั่ง "lbreak addr" (สำหรับเชิงเส้น) หรือ "pbreak addr" (ทางกายภาพ) เพื่อแสดงรายการเบรกพอยต์ที่กำหนดไว้เพียงพิมพ์ "ตัวแบ่งข้อมูล" และ ลบ "d number" ขั้นตอนเดียวและเพื่อดำเนินการต่อ (ต่อ)
ด้วยการหยุดการทำงานชั่วคราวคุณสามารถถ่ายโอนข้อมูลด้วย "x" (เชิงเส้น) และ "xp" (ทางกายภาพ) ตามด้วยพารามิเตอร์ทางเลือกบางอย่างเช่นรูปแบบผลลัพธ์จำนวนไบต์และที่อยู่
ตัวอย่าง:
x /30bx 0xC0000000
จะทำให้การถ่ายโอนข้อมูล 30 ไบต์ในรูปแบบเลขฐานสิบหกจากที่อยู่เชิงเส้น 0xC0000000
ในบางกรณีดัมพ์อาจมีขนาดใหญ่พอที่จะอ่านบนหน้าจอ ในกรณีเหล่านี้คุณสามารถทำได้กับไฟล์โดยใช้คำสั่ง "writemem"
ไวยากรณ์ของมันคือ:
writemem "filename" linearAddress lenght_in_bytes
ดังนั้นหากคุณต้องการถ่ายโอนข้อมูล 1024 ไบต์แรกของที่อยู่เชิงเส้น 0xdeadbeef ไปยังไฟล์ "dump" สิ่งที่ต้องการ:
writemem "dump" 0xdeadbeef 1024
ควรทำงาน.
โปรดอ้างอิงถึง http://bochs.sourceforge.net/doc/docbook/user/internal-debugger.html สำหรับข้อมูลเพิ่มเติม.
บางทีคุณกำลังมองหา บันทึกและกู้คืนการจำลอง :
สถานะของ cpu (s), หน่วยความจำ และสามารถบันทึกอุปกรณ์ทั้งหมดได้ในขณะนี้ เมื่อเรียกใช้ Bochs ด้วยจะมีปุ่มในแถบส่วนหัวชื่อ "Suspend"
(เน้นเพิ่ม)