Qualquer assembler do Linux x86-64?

0

Eu quero começar a aprender a linguagem assembly, mas todo o googling não fazia o menor sentido. Eu tenho alguns Exec format error e até usei wine , o que não é bom para entender. Então, pergunto-me se alguém pode dizer o que o assembly de linha de comando fará na arquitetura x86-64 e provavelmente algum exemplo de hello world para Linux?

    
por user30167 24.08.2016 / 13:15

2 respostas

4

Existem algumas montadoras disponíveis, incluindo:

  • gas (parte de binutils e com suporte do GCC) - está disponível em todos os lugares e usa o estilo AT & T;
  • NASM (procure por um pacote nasm em sua distribuição) - isso suporta mnemônicos no estilo Intel;
  • Yasm que é uma reescrita do NASM (procure por um pacote yasm ).

Aqui está um "Hello world" para 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"

Salve isso em hello.S e crie-o usando gcc -c hello.S && ld -o hello hello.o .

O equivalente para 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

Salve isso como hello.asm e crie-o usando nasm -felf64 hello.asm && ld -o hello hello.o .

    
por 24.08.2016 / 13:45
1

O NASM é um bom montador para Linux / Unix. Você pode encontrar muitos exemplos do google para o código NASM de 64 bits.

Para o Centos, você pode instalar o NASM com:

yum install nasm -y

Para o debian / ubuntu, provavelmente é:

apt-get install nasm
    
por 24.08.2016 / 13:29