web-dev-qa-db-ja.com

x86-64 Linuxアセンブラはありますか?

アセンブリ言語を学び始めたいのですが、グーグルはすべて意味がありませんでした。 Exec format errorを入手し、wineを使用しましたが、これは理解に適していません。では、x86-64アーキテクチャでコマンドラインアセンブラが何をするのか、そしておそらくLinuxのHello Worldの例を誰かが教えてくれるのだろうか?

1
user30167

以下を含む、かなりの数のアセンブラが利用可能です。

  • gasbinutilsの一部であり、GCCでサポートされています)—これはどこでも利用でき、AT&Tスタイルを使用します。
  • [〜#〜] nasm [〜#〜] (ディストリビューションでnasmパッケージを探します)—これはIntelスタイルのニーモニックをサポートします。
  • Yasm これはNASMの書き直しです(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を使用してビルドします。

6
Stephen Kitt

NASMは、Linux/Unix用の優れたアセンブラです。 NASM64ビットコードのグーグルからの例をたくさん見つけることができます。

Centosの場合、NASMを次の方法でインストールできます。

yum install nasm -y

Debian/ubuntuの場合、おそらく次のようになります。

apt-get install nasm
2
StefanR