Syscall Keluar (60)
Termasuk bagian Dasar-Dasar dalam perjalanan Assembly di Coddy. Pelajaran 32 dari 45.
Syscall paling penting untuk program apa pun adalah exit. Tanpanya, programmu akan terus berjalan selamanya atau crash saat mencapai akhir memori.
Nomor syscall exit adalah 60.
Sintaks:
mov rax, 60 ; nomor syscall untuk keluar
mov rdi, 0 ; kode keluar (0 = berhasil)
syscall ; minta OS untuk keluarApa yang terjadi saat kamu menjalankan syscall dengan rax = 60:
- CPU melompat ke kernel Linux
- Kernel melihat: "exit syscall with code 0"
- Kernel menghentikan programmu
- Kernel mengembalikan kendali ke shell atau sistem operasi
Kode keluar 0 berarti berhasil: program selesai tanpa error. Kode keluar 1 hingga 255 menunjukkan berbagai error. Kamu dapat memilih angka berapa pun untuk menandakan apa yang salah.
Mengapa kode keluar penting:
Setelah programmu keluar, shell (terminal) menyimpan kode keluar. Kamu bisa memeriksanya dengan:
./myprogram
echo $? ; Prints the exit codeIni berguna untuk:
- Skrip yang memeriksa apakah program berhasil
- Debug (kode berbeda untuk error yang berbeda)
- Menghubungkan program satu sama lain
Program minimal yang lengkap:
section .text
global _start
_start:
mov rax, 60 ; syscall untuk keluar
mov rdi, 0 ; kode keluar 0 (berhasil)
syscallProgram ini tidak melakukan apa pun yang terlihat. Program ini hanya keluar dengan sukses. Namun, ini adalah program yang valid dan lengkap.
Mari kita bahas apa itu global _start dan _start:.
| Kode | Apa itu | Alasan kamu membutuhkannya |
|---|---|---|
global _start | Memberi tahu linker tempat programmu dimulai | Tanpanya, linker tidak tahu label mana yang menjadi titik masuk |
_start: | Label yang menandai awal kodemu | CPU mulai menjalankan kode di sini |
Kamu tidak perlu menghafal detailnya. Cukup ketahui bahwa setiap main.asm harus memiliki dua baris ini sebelum kodemu. Kamu akan menggunakannya di setiap program.
Apa yang terjadi jika kamu lupa syscall exit?
Jika kamu tidak menyertakan syscall exit, CPU akan terus menjalankan data sampah apa pun yang kebetulan berada di memori setelah kodemu. Hal ini biasanya menyebabkan segmentation fault (crash) atau perilaku yang sama sekali tidak terduga. Programmu tidak akan berakhir dengan benar.
Selalu akhiri programmu dengan syscall keluar.
Tantangan
Tambahkan syscall exit dengan kode keluar 5.
Kode untuk mencetak pesan "Exiting with code 5" sudah disediakan untukmu. Kamu belum perlu memahaminya. Materi ini akan dibahas di Bab 5.
Tugasmu hanya menambahkan syscall exit di bagian akhir.
Coba sendiri
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: Tambahkan syscall exit dengan kode keluar 5
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Dasar-Dasar
Latihan sendiri: Playground Assembly