Menu
Coddy logo textTech

Exit Syscall (60)

Coddy'nin Assembly Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 32 / 45.

Herhangi bir program için en önemli sistem çağrısı exit çağrısıdır. Bu çağrı olmadan programınız sonsuza kadar çalışmaya devam eder veya belleğin sonuna ulaştığında çöker.

exit sistem çağrısının numarası 60'tır.

Sözdizimi:

mov rax, 60    ; çıkış için syscall numarası
mov rdi, 0     ; çıkış kodu (0 = başarı)
syscall        ; OS'den çıkmasını iste

syscall komutunu <strong>rax = 60</strong> ile çalıştırdığınızda ne olur:

  1. CPU, Linux çekirdeğine geçer
  2. Çekirdek şunu görür: "exit syscall with code 0"
  1. Çekirdek programınızı sonlandırır
  2. Çekirdek denetimi kabuğa veya işletim sistemine geri verir

Çıkış kodu 0 başarı anlamına gelir: program hatasız olarak tamamlanmıştır. 1 ile 255 arasındaki çıkış kodları farklı hataları belirtir. Neyin yanlış gittiğini belirtmek için herhangi bir sayı seçebilirsiniz.

Çıkış kodları neden önemlidir:

Programınızdan çıktıktan sonra kabuk (terminal), çıkış kodunu saklar. Bunu şu şekilde kontrol edebilirsiniz:

./myprogram
echo $?    ; Çıkış kodunu yazdırır

Şunlar için kullanışlıdır:

  • Bir programın başarılı olup olmadığını kontrol eden betikler
  • Hata ayıklama (farklı hatalar için farklı kodlar)
  • Programları birbirine zincirleme

Tam bir minimal program:

section .text
    global _start

_start:
    mov rax, 60    ; çıkış sistem çağrısı
    mov rdi, 0     ; çıkış kodu 0 (başarı)
    syscall

Bu program görünür hiçbir şey yapmaz. Yalnızca başarıyla çıkar. Ancak geçerli ve eksiksiz bir programdır.

global _start ve _start: ifadelerinin ne olduğundan bahsedelim.

KodNedirNeden gerekli
global _startProgramınızın nerede başladığını bağlayıcıya bildirirBu olmadan bağlayıcı, hangi etiketin giriş noktası olduğunu bilemez
_start:Kodunuzun başlangıcını belirten bir etiketCPU yürütmeye burada başlar

Ayrıntıları ezberlemen gerekmez. Yalnızca her main.asm dosyasında kodundan önce bu iki satırın bulunması gerektiğini bil. Bunları her programda kullanacaksın.

Çıkış sistem çağrısını unutursanız ne olur?

Çıkış sistem çağrısını eklemezseniz CPU, kodunuzdan sonra bellekte bulunan rastgele verileri yürütmeye devam eder. Bu genellikle bir segmentasyon hatasına (çökmeye) veya tamamen beklenmedik davranışlara neden olur. Programınız düzgün bir şekilde sonlanmaz.

Programınızı her zaman bir çıkış syscall'ı ile sonlandırın.

challenge icon

Görev

Çıkış sistem çağrısını, çıkış kodu 5 olacak şekilde ekleyin.

"Exiting with code 5" iletisini yazdıran kod sizin için zaten sağlanmıştır. Henüz bunu anlamanız gerekmiyor. Bu konu Bölüm 5'te ele alınacaktır.

Göreviniz yalnızca sona çıkış sistem çağrısını eklemektir.

Kendin dene

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 kodu 5 ile exit syscall'ını ekle
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Temel Bilgiler bölümündeki tüm dersler

Kendi başına pratik yap: Assembly playground