Menu
CoddyTech
flag Ar iconالعربيةdown icon

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

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

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

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

الصياغة:

mov rax, 60    ; رقم استدعاء النظام للخروج
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: أضف استدعاء النظام exit برمز خروج 5
quiz iconاختبر نفسك

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

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

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