私は自分自身でx86のアセンブリをtheseビデオチュートリアルからlinuxで教え始めました。早い段階で、write sys-callを使用してデータセクションに格納されている文字列を出力する方法を教えてくれます。 writeシステムコールを使用して、スタックに格納されている文字列を出力することは可能ですか?ここでは、私が試してこれを行うために書いたコードは動作していないようです。スタック上の文字列を使用したLinux write sys呼び出し
.data
abc:
.asciz "ABC"
.text
.globl _start
_start:
pushq %rbp
movq %rsp, %rbp
subq $32, %rsp
leaq -32(%rbp), %rdi
movb $65, (%rdi) #move 'A' on to stack
addq $1, %rdi
movb $66, (%rdi) #move 'B' on to stack
addq $1, %rdi
movb $67, (%rdi) #move 'C' on to stack
addq $1, %rdi
movb $0, (%rdi) #Null terminate
movq $4, %rax #4 is write syscall
movq $1, %rbx #1 for stdout
movq %rsp, %rcx #pointer to ABC string on stack
movq $3, %rdx #length of string
int $0x80
movq $1, %rax #exit syscall
xorq %rbx, %rbx
int $0x80
このプログラムは、ABCを印刷せずに実行され、終了しますが、データセグメントに格納された文字列を渡すと、ABCが印刷されます。私は間違ったことをやっているのですか?そうではありませんか?どんな助けにも感謝しています。
最初のpushqを除いて、このコードはスタックポインタを変更することはできません... 'subq $ 32、%rsp'を意味しましたか、何か不足していますか? – Nemo
@ニモ私はええ、私のポストのちょうどタイプミスです。私は元のコードで正しく行います。ありがとうございました –
私はそれを変更しました。 :) –