คำตอบ:
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 eax
i 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ตัวอย่าง