Data Declaration:
ภาพที่ 1
จากภาพที่ 1 มีการประกาศตัวแปร Array: dArr32 dd 1000, -1500, 3000
เมื่อตรวจกับ DDD ด้วยคำสั่ง x/3dw &dArr32
ก็จะได้ค่า 0x402000: 1000 -1500 3000
ภาพที่ 2 ตรวจสอบค่าในแต่ละ Array
โดยโครงสร้างใน Memory จะเป็นตามภาพ
1000 = 0x 00 00 03 E8
-1500 = 0x FF FF FA 24
3000 = 0x 00 00 0B B8
ภาพที่ 3 ข้อมูลในแต่ละ Address
หากต้องการดูข้อมูลในแต่ละ Address สามารถใช้คำสั่ง
gdb: x/1xb (char *)(&dArr32 + <offset>) เช่น x/1xb (char *)(&dArr32 + 8>)
ก็จะได้ ค่า 0xB8
!!! หมายเหตุ อย่าลืมใส่เครื่องหมาย & หน้าตัวแปร นะครับ &dArr32
หรือ gdb: x/1xb <Address Pointer> เช่น
x/1xb 0x402008 ก็จะได้ ค่า 0xB8
ภาพที่ 4 หน้าต่าง DDD Registers
จะเห็นได้ว่าค่า rax ใน DDD Register จะแสดงค่า Hex ดังนี้ 0xFFFFFA24 ซึ่งตรงตามข้อมูลที่อยู่ใน Address pointer (Hex) 0x402004 - 0x402007
แต่ค่า Dec ในคอลัมน์ที่ 3 จะแสดงค่าเป็น Unsigned คือ 4,294,965,796 สี่พันกว่าล้าน ไม่ใช่ค่า - 1500 ที่เราอยากเห็น
ดังนั้นถ้าต้องการแสดงค่า int ให้ใช้คำสั่งเพื่อ สร้างกล่องแสดงค่า int โดยพิมพ์คำสั่งใน GDB ดังนี้
graph display (int)$rax
No comments:
Post a Comment