GammaCyber

כתיבת קוד — שיעור 28

Stack ופונקציות

כל 1 משימות הקוד שנשמרו מהשיעור מופיעות כאן, עם דרישות, דוגמאות וקוד פתיחה. אפשר לכתוב פתרון בעורך המקומי וללחוץ על „בדיקת AI” לקבלת ציון, רמזים והערות.

T3 · בינוני350 נק'~20 דק'analysis
חישוב Offset לכתובת החזרה
בפונקציה vuln() יש char buf[40], והבינארי קומפל ב-gcc -O0 -fno-stack-protector -no-pie. ה-disassembly מראה שהבאפר נטען ב-`lea -0x30(%rbp),%rax`. חשב כמה בתים צריך לכתוב מתחילת buf כדי להגיע *בדיוק* לכתובת החזרה (saved RIP). רמז: buf ב-rbp-0x30; אחרי saved rbp (8 בתים) באה כתובת החזרה. הגש מספר עשרוני.
דוגמאות
buf ב-rbp-0x30, saved rbp = 8 בתים → offset = 0x30 + 8
פתרון-ייחוס חישוב Offset לכתובת החזרה ›
buf ב-rbp-0x30 (48). עד saved rbp: 48 בתים. + 8 בתים של saved rbp = 56 עד כתובת החזרה. (שים לב: 40+8=48 היה שגוי — gcc יישר את הבאפר ל-0x30!)
הפתרון נשמר מקומית אוטומטית.