คำตอบ:
info registersแสดงทะเบียนทั้งหมด; แสดงให้เห็นเพียงลงทะเบียนinfo registers eax eaxคำสั่งสามารถย่อเป็นi r
info registers eaxดังนั้นคำสั่งสำหรับการลงทะเบียนที่เฉพาะเจาะจงคือ ฉันไม่แน่ใจว่าสิ่งนี้แตกต่างกันสำหรับ gdb รุ่นอื่นหรือไม่
register read [eax]
displayใช้ได้ display $eaxเพื่อยกตัวอย่างเช่น
หากคุณพยายามพิมพ์การลงทะเบียนเฉพาะใน GDB คุณต้องละเว้นเครื่องหมาย% ตัวอย่างเช่น,
info registers eip
หากปฏิบัติการของคุณคือ 64 บิตการลงทะเบียนเริ่มต้นด้วย r เริ่มต้นด้วย e ไม่ถูกต้อง
info registers rip
สิ่งเหล่านี้สามารถย่อให้:
i r rip
นอกจากนี้ยังมี:
info all-registers
จากนั้นคุณจะได้รับชื่อการลงทะเบียนที่คุณสนใจซึ่งมีประโยชน์มากสำหรับการค้นหาการลงทะเบียนเฉพาะแพลตฟอร์ม (เช่น NEON Q ... บน ARM)
eax, ecxและลงทะเบียนมาตรฐานอื่น ๆ info registersที่ซ่อนอยู่โดย นี่อาจเป็นคำตอบที่ยอมรับได้
info registersแสดงการลงทะเบียนdisplay $espแสดงการลงทะเบียน esp ในบรรทัดคำสั่ง gdb ต่อไปlayout regsให้แสดงการลงทะเบียนต่อไปด้วยโหมด TUIคำสั่ง Gdb :
i r <register_name>: พิมพ์ทะเบียนเพียงครั้งเดียวเช่นi r rax,i r eaxi r <register_name_1> <register_name_2> ...: พิมพ์หลายลงทะเบียนเช่นi r rdi rsi,i r: พิมพ์การลงทะเบียนทั้งหมดยกเว้นทศนิยมและการลงทะเบียนเวกเตอร์ (xmm, ymm, zmm)i r a: พิมพ์การลงทะเบียนทั้งหมดรวมถึงทศนิยมและการลงทะเบียนเวกเตอร์ (xmm, ymm, zmm)i r f: พิมพ์การลงทะเบียนลอยตัว FPU ทั้งหมด ( st0-7และอีกสองสามรายการf*)กลุ่มการลงทะเบียนอื่น ๆ นอกเหนือจากa( all) และf( float) สามารถพบได้กับ:
maint print reggroups
ตามที่บันทึกไว้ที่: https://sourceware.org/gdb/current/onlinedocs/gdb/Registers.html#Registers
เคล็ดลับ :
xmm0~ xmm15เป็น 128 บิตเกือบทุกเครื่องทันสมัยมีมันพวกเขาได้รับการปล่อยตัวในปี 1999ymm0~ ymm15, เป็น 256 บิต, เครื่องใหม่มักจะมีมัน, พวกเขาจะเปิดตัวในปี 2011zmm0~ zmm31เป็น 512 บิตพีซีปกติอาจไม่มี ( เหมือนปี 2559 ) พวกเขาเปิดตัวในปี 2556 และส่วนใหญ่ใช้ในเซิร์ฟเวอร์จนถึงตอนนี้p $eax ทำงานเหมือน GDB 7.7.1
ในฐานะของ GDB 7.7.1 คำสั่งที่คุณพยายามใช้งาน:
set $eax = 0
p $eax
# $1 = 0
set $eax = 1
p $eax
# $2 = 1
ไวยากรณ์นี้ยังสามารถใช้เพื่อเลือกระหว่างสมาชิกสหภาพที่แตกต่างกันเช่นสำหรับการลงทะเบียน ARM floating point ซึ่งสามารถเป็นทศนิยมหรือเลขจำนวนเต็ม:
p $s0.f
p $s0.u
จากเอกสาร :
ชื่อใด ๆ ที่นำหน้าด้วย '$' สามารถใช้สำหรับตัวแปรอำนวยความสะดวกเว้นแต่ว่าเป็นชื่อลงทะเบียนเฉพาะเครื่องที่กำหนดไว้ล่วงหน้า
และ :
คุณสามารถอ้างถึงเนื้อหาที่ลงทะเบียนเครื่องเป็นนิพจน์เป็นตัวแปรที่มีชื่อขึ้นต้นด้วย '$' ชื่อของการลงทะเบียนนั้นแตกต่างกันสำหรับแต่ละเครื่อง ใช้การลงทะเบียนข้อมูลเพื่อดูชื่อที่ใช้ในเครื่องของคุณ
แต่ฉันยังไม่ได้โชคดีกับการลงทะเบียนการควบคุมจนถึงตอนนี้: OSDev 2012 http://f.osdev.org/viewtopic.php?f=1&t=25968 || คำขอคุณลักษณะปี 2005 https://www.sourceware.org/ml/gdb/2005-03/msg00158.html || alt.lang.asm 2013 https://groups.google.com/forum/#!topic/alt.lang.asm/JC7YS3Wu31I
การลงทะเบียน ARM floating point
ดู: /reverseengineering/8992/floating-point-registers-on-arm/20623#20623
$ไวยากรณ์นี้
layout regเพื่อให้ gdb แสดงตารางจำนวนเต็มและค่าสถานะการลงทะเบียนโดยไฮไลต์ค่าที่เปลี่ยนแปลงโดยคำสั่งก่อนหน้า ดูstackoverflow.com/tags/x86/infoตัวอย่าง