1. โปรแกรม Push และ Pop
ภาพที่ 1 โปรแกรมแสดงการทำงาน
2. แสดงค่า numbers หรือ renum ในโปรแกรม DDD
(gdb) graph display *(long long *)(&number)
(gdb) graph display *(long long *)((unsigned long long) (&number + 8)
ภาพที่ 2 การแสดงค่า numbers แล renum
3. ขนาดข้อมูล ในโปรแกรมประกาศเป็น dq / resq (Quad Word) ดังนั้นใน GDB จะต้องใช้ long long
3.1 &renum จะส่งค่า address ของ renum
3.2 *(&renum) จะส่งค่า Value ในตัวแปร renum
3.3 (long long *) เป็นการ cast ค่า (&renum) เพื่อบอกว่าเป็น ประเภท Pointer ( * ) มีขนาด 64-bits คือ long long
3.4 (unsigned long long) เป็นการ cast ค่าของ &renum และตัวถัดๆ ไป -> โดยจะใช้โครงสร้าง(unsigned long long)&renum
รวมเป็น *(long long *)(unsigned long long)&renum
3.5 เมื่อต้องการดูค่าถัดไป ให้เริ่มจากค่า address ของตัวถัดไป (&renum + <byte>) เช่น &renum[1] = (&renum + 8)
รวมเป็น *(long long *)((unsigned long long)&renum + 8)
4. ก่อนการ push
ภาพที่ 4 ตำแหน่ง rsp ก่อนการ push
การดูค่าใน Stack : (gdb) graph display *(long long *)((unsigned long long) ($rsp)
(gdb) x/dg $rsp
5. ตำแหน่ง rsp หลังการ push ครั้งที่ 1$
ภาพที่ 5 ตำแหน่ง rsp หลังการ push ครั้งแรก
6 ตำแหน่ง rsp หลังจาก push ครั้งที่ 2
ภาพที่ 6 ตำแหน่ง push ครั้งที่สอง
7 ตำแหน่ง rsp หลังจาก pop ครั้งที่ 1
ภาพที่ 7 การ pop จะทำให้ rsp บวกขึ้นไป


