2010-07-23 29 views
50

Soy bastante nuevo en Linux (Ubuntu 10.04) y un principiante total para el ensamblador. Estaba siguiendo algunos tutoriales y no pude encontrar nada específico para Linux. Entonces, mi pregunta es, ¿qué es un buen paquete para compilar/ejecutar ensamblador y cuáles son los comandos de línea de comandos para compilar/ejecutar para ese paquete?¿Compila/ejecuta el ensamblador en Linux?

+0

Estoy en el mismo barco. Realmente nunca recogí el asm en Linux porque no hay presencia real. Tal vez sea porque en el crackeo de Windows está de moda. –

+0

Esto no responde completamente mi pregunta. Todavía quiero saber qué comandos de consola utilizaría para compilar y ejecutar programas en NASM o gas –

+0

Mi preferencia es NASM. Te doy un poco de información sobre cómo ponerlo en funcionamiento en Ubuntu a continuación. – Justin

Respuesta

40

El ensamblador GNU (gas) y NASM son buenas opciones. Sin embargo, tienen algunas diferencias, la más importante es la orden en que pones las operaciones y sus operandos.

de gas utiliza la sintaxis AT & T:

mnemonic source, destination 

nasm utiliza estilo de Intel:

mnemonic destination, source 

Cualquiera de los dos probablemente hará lo que usted necesita.

Prueba este tutorial: http://asm.sourceforge.net/intro/Assembly-Intro.html

+0

Gracias, ese tutorial es excelente ya que es específico de Linux. Además, el tutorial tenía instrucciones muy específicas sobre cómo compilar y ejecutar progrs de ensamblador en linux –

+1

gas ha soportado ".intel_syntax" por un tiempo - Yo personalmente todavía uso fasm, yasm o nasm. – snemarch

17

Si está usando NASM, la línea de comandos es sólo

nasm file.asm -o outfile 

donde 'file.asm' es el archivo de ensamblaje (código) y 'archivo_salida' es el ejecutable que quieres

Aquí hay alguna información más:

http://www.nasm.us/doc/nasmdoc2.html#section-2.1

Puede instalar NASM en Ubuntu con el siguiente comando:

apt-get install nasm 

Aquí es un Hola Mundo en Linux montaje básico para abrir el apetito :

http://web.archive.org/web/20120822144129/http://www.cin.ufpe.br/~if817/arquivos/asmtut/index.html

Espero que esto sea lo que estaba preguntando ...

+0

Hello World ejemplo es un enlace roto! –

+0

http://www.tldp.org/HOWTO/Assembly-HOWTO/hello.html#AEN867 – imbellish

47

El ensamblador GNU probablemente ya esté instalado en su sistema. Pruebe man as para ver la información de uso completa. Puede usar as para compilar archivos individuales y ld para vincular si realmente desea hacerlo.

Sin embargo, GCC es un gran front-end. Puede armar archivos .s por ti. Por ejemplo:

$ cat >hello.s <<EOF 
.data 
.globl hello 
hello: 
.string "Hello, world!" 

.text 
.global main 
main: 
    pushq %rbp 
    movq %rsp,  %rbp 
    movq $hello,  %rdi 
    call puts 
    movq $0,   %rax 
    leave 
    ret 
EOF 
$ gcc hello.s -o hello 
$ ./hello 
Hello, world! 

El código anterior es AMD64. Sería diferente si todavía está en una máquina de 32 bits.

También puede compilar el código C/C++ directamente en el montaje, si usted es curioso cómo funciona algo:

$ cat >hello.c <<EOF 
#include <stdio.h> 
int main(void) { 
    printf("Hello, world!\n"); 
    return 0; 
} 
EOF 
$ gcc -S hello.c -o hello.s 
8

También hay FASM para Linux.

format ELF executable 

segment readable executable 

start: 
mov eax, 4 
mov ebx, 1 
mov ecx, hello_msg 
mov edx, hello_size 
int 80h 

mov eax, 1 
mov ebx, 0 
int 80h 

segment readable writeable 

hello_msg db "Hello World!",10,0 
hello_size = $-hello_msg 

Se comillas con

fasm hello.asm hello 
Cuestiones relacionadas