Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

استدعاء النظام Exit Syscall (60)

جزء من قسم الأساسيات في رحلة Assembly على Coddy. الدرس 32 من 45.

أهم استدعاء نظام لأي برنامج هو exit. بدونه، سيستمر برنامجك في العمل إلى الأبد أو سيتعطل عندما يصل إلى نهاية الذاكرة.

رقم استدعاء النظام exit هو 60.

البنية:

mov rax, 60    ; رقم استدعاء النظام للخروج
mov rdi, 0     ; رمز الخروج (0 = نجاح)
syscall        ; اطلب من نظام التشغيل الخروج

ما الذي يحدث عند تنفيذ <strong>syscall</strong> مع <strong>rax = 60</strong>:

  1. تقفز وحدة المعالجة المركزية إلى نواة Linux
  2. ترى النواة: "exit syscall with code 0"
  1. تنهي النواة برنامجك
  2. تعيد النواة التحكم إلى الصدفة أو نظام التشغيل

رمز الخروج 0 يعني النجاح: اكتمل البرنامج دون أخطاء. تشير رموز الخروج من 1 إلى 255 إلى أخطاء مختلفة. يمكنك اختيار أي رقم للإشارة إلى ما حدث من خطأ.

لماذا تُعدّ رموز الخروج مهمة:

بعد انتهاء برنامجك، تخزّن الصدفة (الطرفية) رمز الخروج. يمكنك التحقّق منه باستخدام:

./myprogram
echo $?    ; يطبع رمز الخروج

هذا مفيد من أجل:

  • البرامج النصية التي تتحقق مما إذا كان البرنامج قد نجح
  • تصحيح الأخطاء (رموز مختلفة للأخطاء المختلفة)
  • ربط البرامج معًا

برنامج كامل ومصغّر:

section .text
    global _start

_start:
    mov rax, 60    ; استدعاء نظام الخروج
    mov rdi, 0     ; رمز الخروج 0 (نجاح)
    syscall

لا يفعل هذا البرنامج أي شيء مرئي. إنه يخرج بنجاح فحسب. لكنه برنامج صالح ومكتمل.

لنذكر ما هو global _start وما هو _start:.

الشفرةماهيتهسبب حاجتك إليه
global _startيخبر الرابط بمكان بدء برنامجكمن دونه، لا يعرف الرابط أي تسمية هي نقطة الدخول
_start:تسمية تشير إلى بداية شفرتكيبدأ CPU التنفيذ من هنا

لا تحتاج إلى حفظ التفاصيل. يكفي أن تعرف أن كل ملف main.asm يجب أن يحتوي على هذين السطرين قبل التعليمات البرمجية الخاصة بك. ستستخدمهما في كل برنامج.

ماذا يحدث إذا نسيت استدعاء syscall الخاص بـ exit؟

إذا لم تُضمّن syscall الخاص بـ exit، فسيستمر CPU في تنفيذ أي بيانات عشوائية تصادف وجودها في الذاكرة بعد التعليمة البرمجية الخاصة بك. وعادةً ما يتسبب ذلك في حدوث خطأ في تقسيم الذاكرة (تعطّل) أو سلوك غير متوقع تمامًا. ولن ينتهي برنامجك بشكل سليم.

أنهِي برنامجك دائمًا باستدعاء نظام للخروج.

challenge icon

التحدي

أضف استدعاء النظام exit مع رمز الخروج 5.

تم توفير التعليمة البرمجية لطباعة الرسالة "Exiting with code 5" لك بالفعل. لا تحتاج إلى فهمها بعد. سيتم تناولها في الفصل 5.

مهمتك الوحيدة هي إضافة استدعاء النظام exit في النهاية.

جرّب بنفسك

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اختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الأساسيات

تدرّب بنفسك: Playground لـ Assembly