Sunday, September 27, 2026

x86 LINUX Assembly YASM

 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