現在、私はLinuxでアセンブリ言語を学んでいます。私は本書「Programming From the Ground Up」を使用しており、すべての例は32ビットです。私のOSは64ビットで、64ビットですべての例を実行しようとしています。しかし、私は問題を抱えています:x86_64アセンブリLinuxシステムコールコンフュージョン
.section .data
.section .text
.global _start
_start:
movq $60, %rax
movq $2, %rbx
int $0x80
これは単にLinuxのexitシステムコールを呼び出すだけです。代わりにSEG FAULTが発生し、代わりにこれを実行すると、
.section .data
.section .text
.global _start
_start:
movq $1, %rax
movq $2, %rbx
int $0x80
が動作します。明らかに、問題は私が%raxに移動する価値です。 2番目の例で使用している$ 1という値は、 'Programming From the Ground Up'がインターネット上の複数のソースを使っていると言われていますが、64ビットシステムコール番号は$ 60だと言われています。 Reference 何が間違っていますか?また、私は他にどのような問題に気を付けるべきですか?あなたが知る必要がある場合に備えて、私は第5章のProgramming From The Ground Upにいます。
私はおそらくそれをやり遂げるつもりです。ご回答いただきありがとうございます。 –
'%rbx'ではなく、最初のシステムコール引数に'%rdi'を使うべきです。 –
それをキャッチするためにありがとう - 固定。 – duskwuff