私は再学習して、初心者向けの非常に基本的なアセンブリ コードを作成しています。x86_64 で Ubuntu を実行していますが、従うチュートリアルは 32 ビット x86 で行われました。
アセンブルとリンクは正常に行われますが、実行時に segfault が発生する短いアセンブリ プログラムを以下に示します。私のエラーは、32ビットと64ビットの命令の間の行とメモリ使用量に関する混乱/混乱であると確信しています。たとえば、すべてのレジスタ (収集したものからの 32 ビット レジスタの x86_64 バージョン) でmovq
命令を使用していますが、おそらくそれは誤りです。r**
誰かがここで問題を説明できれば本当にありがたいです。原因をよりよく理解できれば、将来この種の問題を回避するのに本当に役立つと思います.
.data
Bash:
.asciz "/bin/bash"
Null1:
.int 0
AddrToBash:
.int 0
Null2:
.int 0
.text
.globl _start
_start:
movq $Bash, AddrToBash
movq $59, %rax
movq $Bash, %rbx
movq $AddrToBash, %rcx
movq $Null2, %rdx
syscall
Exit:
movq $60, %rbx
movq $1, %rax
syscall
前もって感謝します!