2010-07-23 7 views
50

Je suis assez nouveau pour Linux (Ubuntu 10.04) et un novice à l'assembleur. Je suivais quelques tutoriels et je ne pouvais pas trouver quelque chose de spécifique à Linux. Donc, ma question est, quel est un bon paquet pour compiler/exécuter l'assembleur et quelles sont les commandes de ligne de commande à compiler/exécuter pour ce paquet?Compiler/exécuter l'assembleur sous Linux?

+0

Je suis dans le même bateau. Je n'ai jamais vraiment vu d'asm sur Linux parce qu'il n'y a pas de présence réelle. C'est peut-être parce que sur Windows, le cracking fait fureur. –

+0

Ceux-ci ne répondent pas complètement à ma question. Je veux toujours savoir quelles commandes de la console vous utiliseriez pour compiler et exécuter des programmes en MSNA ou gaz –

+0

Ma préférence est NASM. Je vous donne quelques informations sur la façon de le faire fonctionner sur Ubuntu ci-dessous. – Justin

Répondre

40

L'assembleur GNU (gaz) et MSNA sont deux bons choix. Cependant, ils ont quelques différences, la grande étant l'ordre dans lequel vous mettez les opérations et leurs opérandes.

gaz

utilise AT & T Syntaxe:

mnemonic source, destination 

nasm utilise le style intel:

mnemonic destination, source 

Soit on probablement faire ce que vous avez besoin.

Essayez ce tutoriel: http://asm.sourceforge.net/intro/Assembly-Intro.html

+0

Merci, ce tutoriel est génial car il est spécifique à Linux. En outre, le tutoriel avait des instructions très spécifiques sur la façon de compiler et d'exécuter des progs assembleur dans linux –

+1

gaz a pris en charge ".intel_syntax" pour un moment - je serais personnellement toujours utiliser fasm, yasm ou nasm si. – snemarch

17

Si vous utilisez MSNA, la ligne de commande est juste

nasm file.asm -o outfile 

où 'file.asm' est votre fichier d'assemblage (code) et 'outfile' est l'exécutable que vous voulez.

Voici quelques informations supplémentaires:

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

Vous pouvez installer MSNA dans Ubuntu avec la commande suivante:

apt-get install nasm 

est ici un Bonjour tout le monde de base dans l'assemblage Linux pour aiguiser votre appétit :

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

J'espère que c'est ce que vous demandiez ...

+0

Exemple Hello World est un lien brisé! –

+0

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

47

L'assembleur GNU est probablement déjà installé sur votre système. Essayez man as pour voir toutes les informations d'utilisation. Vous pouvez utiliser as pour compiler des fichiers individuels et ld pour lier si vous voulez vraiment, vraiment.

Cependant, GCC fait un excellent frontal. Il peut assembler des fichiers .s pour vous. Par exemple:

$ 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! 

Le code ci-dessus est AMD64. Ce serait différent si vous êtes toujours sur une machine 32 bits.

Vous pouvez également compiler le code C/C++ directement à l'assemblage si vous êtes curieux de voir comment quelque chose fonctionne:

$ 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

Il y a aussi FASM pour 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 

Il comiles avec

fasm hello.asm hello