Menu
CoddyTech

Exit Syscall (60)

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

Her 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    ; exit için syscall numarası
mov rdi, 0     ; çıkış kodu (0 = başarı)
syscall        ; OS'den çıkış yapmasını iste

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

  1. CPU, Linux çekirdeğine atlar
  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 tamamlandı. 1 ile 255 arasındaki çıkış kodları farklı hataları belirtir. Neyin yanlış gittiğini bildirmek için herhangi bir sayı seçebilirsiniz.

Çıkış kodları neden önemlidir:

Programınız sonlandıktan sonra kabuk (terminal) çıkış kodunu saklar. Şu komutla kontrol edebilirsiniz:

./myprogram
echo $?    ; Prints the exit code

Ş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ılı)
    syscall

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

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

KodNe olduğuNeden gerekli olduğu
global _startBağlayıcıya programınızın nerede başladığını söylerBu olmadan bağlayıcı, hangi etiketin giriş noktası olduğunu bilemez
_start:Kodunuzun başlangıcını işaretleyen bir etiketCPU burada yürütmeye başlar

Ayrıntıları ezberlemen gerekmiyor. Her main.asm dosyasında kodundan önce bu iki satırın bulunması gerektiğini bilmen yeterli. 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 gelişigüzel verileri çalıştırmaya devam eder. Bu genellikle bir segmentasyon hatasına (çökme) veya tamamen beklenmedik davranışlara yol açar. Programınız düzgün bir şekilde sonlanmaz.

Programınızı her zaman bir çıkış sistem çağrısıyla bitirin.

challenge icon

Görev

Çıkış kodu 5 olan çıkış sistem çağrısını ekleyin.

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

Tek yapmanız gereken 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: Çıkış kodu 5 olan exit syscall çağrısı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