アセンブリ言語を学び始めたいのですが、グーグルはすべて意味がありませんでした。 Exec format error
を入手し、wine
を使用しましたが、これは理解に適していません。では、x86-64
アーキテクチャでコマンドラインアセンブラが何をするのか、そしておそらくLinuxのHello Worldの例を誰かが教えてくれるのだろうか?
以下を含む、かなりの数のアセンブラが利用可能です。
gas
(binutils
の一部であり、GCCでサポートされています)—これはどこでも利用でき、AT&Tスタイルを使用します。nasm
パッケージを探します)—これはIntelスタイルのニーモニックをサポートします。yasm
パッケージを探してください)。gas
の「Helloworld」は次のとおりです。
.global _start
.text
_start:
mov $1, %rax
mov $1, %rdi
mov $hello, %rsi
mov $13, %rdx
syscall
mov $60, %rax
xor %rdi, %rdi
syscall
hello:
.ascii "Hello, world\n"
これをhello.S
に保存し、gcc -c hello.S && ld -o hello hello.o
を使用してビルドします。
NASMに相当するものは次のとおりです。
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, hello
mov rdx, len
syscall
mov rax, 60
xor rdi, rdi
syscall
hello db "Hello, world",0x0A
len equ $ - hello
これをhello.asm
として保存し、nasm -felf64 hello.asm && ld -o hello hello.o
を使用してビルドします。
NASMは、Linux/Unix用の優れたアセンブラです。 NASM64ビットコードのグーグルからの例をたくさん見つけることができます。
Centosの場合、NASMを次の方法でインストールできます。
yum install nasm -y
Debian/ubuntuの場合、おそらく次のようになります。
apt-get install nasm