Menu
Coddy logo textTech

Exit Syscall (60)

Coddy'nin Assembly Journey'sinin Temeller bölümünün bir parçası — ders 32 / 45.

Herhangi bir program için en önemli sistem çağrısı (syscall) exit'tir. O olmadan, programınız sonsuza kadar çalışmaya devam eder veya belleğin sonuna ulaştığında çöker.

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

Sözdizimi:

mov rax, 60    ; çıkış için syscall numarası
mov rdi, 0     ; çıkış kodu (0 = başarılı)
syscall        ; işletim sisteminden çıkış yapmasını iste

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

  1. CPU, Linux çekirdeğine (kernel) atlar
  2. Çekirdek şunu görür: "0 kodu ile exit sistem çağrısı"
  1. Kernel programınızı sonlandırır
  2. Kernel, kontrolü kabuğa veya işletim sistemine geri verir

Çıkış kodu 0 başarı anlamına gelir — program hatasız tamamlandı. 1'den 255'e kadar olan çıkış kodları farklı hataları belirtir. Neyin yanlış gittiğini bildirmek için herhangi bir sayı seçebilirsiniz.

Çıkış kodları neden önemlidir:

Programınız kapandıktan sonra, kabuk (terminal) çıkış kodunu saklar. Şununla kontrol edebilirsiniz:

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

Bu ş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    ; exit sistem çağrısı
    mov rdi, 0     ; çıkış kodu 0 (başarılı)
    syscall

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

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

KodNedirNeden ihtiyacınız var
global _startBağlayıcıya (linker) programınızın nerede başladığını söylerO olmadan, bağlayıcı hangi etiketin giriş noktası olduğunu bilemez
_start:Kodunuzun başlangıcını işaret eden bir etiketİşlemci (CPU) yürütmeye buradan başlar

Detayları ezberlemenize gerek yok. Sadece her main.asm dosyasının kodunuzdan önce bu iki satıra sahip olması gerektiğini bilin. Bunları her programda kullanacaksınız.

exit syscall'unu unutursanız ne olur?

Eğer exit syscall'unu dahil etmezseniz, CPU kodunuzdan sonra bellekte bulunan her türlü çöp veriyi yürütmeye devam edecektir. Bu genellikle bir segmentasyon hatasına (segmentation fault - çökme) veya tamamen beklenmedik davranışlara neden olur. Programınız temiz bir şekilde sonlanmayacaktır.

Programınızı her zaman bir exit sistem çağrısı (syscall) ile sonlandırın.

challenge icon

Görev

Çıkış kodu 5 olan exit syscall'u ekleyin.

"Exiting with code 5" mesajını yazdırmak için gereken kod sizin için zaten sağlandı. Henüz bunu anlamanıza gerek yok — Bölüm 5'te ele alınacak.

Göreviniz sadece sonuna exit syscall'u 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: 5 çıkış kodu ile exit syscall'unu ekle
quiz iconKendini test et

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

Temeller bölümündeki tüm dersler