1

標準入力から多数の文字を取得する簡単なプログラムを作成しようとしています。簡潔にするために、関連するコードは次のとおりです。

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システムコールを呼び出す従来の方法であり、回避する必要がある」ことを読みました。(リンク)

これに関する適切なドキュメントが実際には見つからないため、ご意見をいただければ幸いです。

編集:タイプミス

4

1 に答える 1