
アセンブリ言語を学びたいのですが、インターネット検索は何の意味もありません。私はいくつかを手に入れましたが、それをExec format error
理解wine
するのに役立たないものを使用しました。それで、コマンドラインアセンブラが構造x86-64
的に何をしているのか、そしてLinux用のhello worldの例を教えてくれる人がいるのだろうか。
答え1
以下を含むさまざまなアセンブラを使用できます。
gas
(GCCの一部binutils
でありサポートされています) - これはどこでも使用でき、AT&Tスタイルを使用します。- NASM(ディストリビューションでパッケージを見つけます
nasm
。) - これはIntelスタイルのニーモニックをサポートします。 - ヤズムこれはNASM(パッケージの検索
yasm
)を書き直しました。 - パシム、フラットアセンブラ。
これは「Hello world」ですgas
:
.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
してbuild itを使用してください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
。
答え2
NASMはLinux / Unix用の優れたアセンブラです。 GoogleはNASM 64ビットコードの例をたくさん見つけることができます。
Centosの場合は、次のコマンドを使用してNASMをインストールできます。
yum install nasm -y
Debian/Ubuntu の場合、次のようになります。
apt-get install nasm
答え3
SASM
ファイルを編集します。
$ apt-get install sasm
NASM
ファイルをコンパイルします。
$ apt-get install nasm