終了コード
CoddyのAssemblyジャーニー「基礎」セクションの一部 — レッスン 33/45。
プログラムが終了するとき、オペレーティングシステムに小さな数値を返します。この数値は、終了コードまたは終了ステータスと呼ばれます。
終了コードが重要な理由:
スクリプトは終了コードを使用して、プログラムが成功したかどうかを確認します。例えば、バックアップスクリプトは、前のコマンドが成功した場合にのみ続行されることがあります。
終了コードはデバッグにも役立ちます。問題ごとに異なるエラーコードを使用できます。
また、プログラムを連結して、前のプログラムが成功した場合にのみ次のプログラムが実行されるようにすることもできます。シェルは、次のコマンドを実行する前に終了コードを確認します。
終了コードのルール:
| 終了コード | 意味 |
|---|---|
| 0 | 成功 — すべて正常に動作しました |
| 1-255 | エラーが発生しました |
エラーコードの選択:
1から255までの任意の数字を使用できます。それぞれの数字が何を意味するかは、プログラマーであるあなた次第です。
| 終了コード | 意味 |
|---|---|
| 1 | 一般的なエラー |
| 2 | 入力ファイルが見つかりません |
| 3 | アクセス拒否 |
| 4 | ネットワークエラー |
終了コードを設定しないとどうなりますか?
exitシステムコールの前に、必ずrdiを設定しなければなりません。忘れてしまうと、rdiにはレジスタに残っていたゴミが含まれることになり、プログラムはランダムな終了コードで終了してしまいます。
チャレンジ
終了コード 2("file not found" を示すため)で終了する、完全なアセンブリプログラムを記述してください。
出力用のコードはあらかじめ用意されています。exit システムコールを追加するだけです。
自分で試してみよう
section .data
msg db 'Backup complete', 0x0a
msgLen equ $ - msg
section .text
global _start
_start:
; メッセージを表示(テストハーネスによって提供)
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msgLen
syscall
; 受講生のコードはここから
%include "solution.asm"このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。