Menu
Coddy logo textTech

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

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

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

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

תחביר:

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

מה קורה כשמריצים <strong>syscall</strong> עם <strong>rax = 60</strong>:

  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 חייבות להופיע שתי השורות האלה לפני הקוד שלך. תשתמש בהן בכל תוכנית.

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

אם לא כוללים את קריאת המערכת exit, ה-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 אונליין