Menu
CoddyTech

קריאת מערכת ליציאה (60)

חלק מהיחידה יסודות במסלול ה-Assembly של Coddy. שיעור 32 מתוך 45.

קריאת המערכת החשובה ביותר עבור כל תוכנית היא exit. בלעדיה, התוכנית שלך תמשיך לפעול לנצח או תקרוס כשתגיע לסוף הזיכרון.

מספר קריאת המערכת exit הוא 60.

תחביר:

mov rax, 60    ; מספר syscall עבור exit
mov rdi, 0     ; קוד יציאה (0 = הצלחה)
syscall        ; בקשה ממערכת ההפעלה לסיים את התהליך

מה קורה כשמבצעים syscall עם rax = 60:

  1. ה-CPU קופץ אל ליבת Linux
  2. הליבה רואה: "exit syscall with code 0"
  1. הליבה מסיימת את התוכנית שלך
  2. הליבה מחזירה את השליטה למעטפת או למערכת ההפעלה

קוד יציאה 0 מציין הצלחה: התוכנית הסתיימה ללא שגיאות. קודי יציאה 1 עד 255 מציינים שגיאות שונות. אפשר לבחור כל מספר כדי לסמן מה השתבש.

למה קודי יציאה חשובים:

לאחר שהתוכנית שלך מסתיימת, המעטפת (המסוף) שומרת את קוד היציאה. אפשר לבדוק אותו באמצעות:

./myprogram
echo $?    ; Prints the exit code

הדבר שימושי עבור:

  • סקריפטים שבודקים אם תוכנית הצליחה
  • ניפוי שגיאות (קודים שונים לשגיאות שונות)
  • שרשור תוכניות זו לזו

תוכנית מינימלית מלאה:

section .text
    global _start

_start:
    mov rax, 60    ; קריאת מערכת לסיום התוכנית
    mov rdi, 0     ; קוד יציאה 0 (הצלחה)
    syscall

התוכנית הזאת לא עושה שום דבר שנראה לעין. היא פשוט מסתיימת בהצלחה. אבל זו תוכנית תקינה ושלמה.

בואו נציין מה הם global _start ו-_start:.

קודמה זהלמה צריך את זה
global _startמציין למקשר היכן התוכנית שלך מתחילהבלעדיו, המקשר לא יודע איזו תווית היא נקודת הכניסה
_start:תווית שמסמנת את תחילת הקוד שלךה-CPU מתחיל לבצע את הקוד כאן

אין צורך לשנן את הפרטים. רק צריך לדעת שבכל main.asm חייבות להופיע שתי השורות האלה לפני הקוד שלך. תשתמש בהן בכל תוכנית.

מה קורה אם שוכחים את קריאת המערכת ליציאה?

אם לא כוללים את קריאת המערכת ליציאה, ה-CPU ימשיך לבצע כל נתון זבל שנמצא במקרה בזיכרון אחרי הקוד שלך. בדרך כלל הדבר גורם לשגיאת פילוח (קריסה) או להתנהגות בלתי צפויה לחלוטין. התוכנית שלך לא תסתיים בצורה מסודרת.

תמיד סיים את התוכנית שלך בקריאת מערכת ליציאה.

challenge icon

אתגר

הוסף את קריאת המערכת ליציאה עם קוד יציאה 5.

הקוד להדפסת ההודעה "Exiting with code 5" כבר מסופק לך. אינך צריך להבין אותו עדיין. הוא יילמד בפרק 5.

עליך רק להוסיף את קריאת המערכת ליציאה בסוף.

נסו בעצמכם

section .data
    msg db 'Exiting with code 5', 0x0a
    msgLen equ $ - msg

section .text
    global _start

_start:
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, msgLen
    syscall

; TODO: הוסף את קריאת המערכת ליציאה עם קוד יציאה 5
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה יסודות

תרגלו בעצמכם: Assembly אונליין