標準入力から多数の文字を取得する簡単なプログラムを作成しようとしています。簡潔にするために、関連するコードは次のとおりです。
mov $3, %rax # sys_read = 3
mov $0, %rbx # stdin fd = 0
mov $b, %rcx # '.lcomm b, 32' declared in .bss section
mov $32,%rdx # size_t
# syscall
int $0x80
int $0x80
プログラムを意図したとおりに使用するとsyscall
、セグメンテーション違反が発生します。syscall
割り込みを使用するには、カーネルがマシンの状態を記憶する必要がありますが、その要件を尊重しない、つまり、カーネルが独自の時間でそれを処理するという事実と関係があることを読みました。これが本当の理由であるかどうかはわかりません-失敗syscall
するようなレジスターに何かをすると思いsys_read
ます。
また、ここに投稿された以前の質問から、「syscall
カーネルに入るデフォルトの方法」であり、「int 0x80
システムコールを呼び出す従来の方法であり、回避する必要がある」ことを読みました。(リンク)
これに関する適切なドキュメントが実際には見つからないため、ご意見をいただければ幸いです。
編集:タイプミス