2010-07-23 2 views
50

Sono abbastanza nuovo per Linux (Ubuntu 10.04) e un novizio totale per l'assemblatore. Stavo seguendo alcuni tutorial e non ho trovato nulla di specifico su Linux. Quindi, la mia domanda è, quale è un buon pacchetto per compilare/eseguire l'assemblatore e quali sono i comandi da riga di comando per compilare/eseguire per quel pacchetto?Compila/esegui assemblatore in Linux?

+0

Sono nella stessa barca. Non ho mai veramente preso Asm su Linux perché non c'è una presenza reale. Forse è perché su Windows cracking è di gran moda. –

+0

Questi non rispondono completamente alla mia domanda. Voglio ancora sapere quali comandi console useresti per compilare ed eseguire programmi in NASM o gas –

+0

La mia preferenza è NASM. Vi do alcune informazioni su come farlo funzionare su Ubuntu sotto. – Justin

risposta

40

The GNU assembler (gas) e NASM sono entrambi buone scelte. Tuttavia, hanno alcune differenze, la più grande è l'ordine in cui metti le operazioni e i loro operandi.

gas utilizza AT sintassi & T:

mnemonic source, destination 

nasm utilizza stile Intel:

mnemonic destination, source 

O si sarà probabilmente fare quello che ti serve.

Prova questo tutorial: http://asm.sourceforge.net/intro/Assembly-Intro.html

+0

Grazie, questo tutorial è ottimo dato che è specifico per Linux. Inoltre, il tutorial aveva istruzioni molto specifiche su come compilare ed eseguire progs di assembler in linux. –

+1

gas ha supportato ".intel_syntax" per un po '- Personalmente avrei comunque usato fasm, yasm o nasm. – snemarch

3

L'assemblatore (GNU) è come (1)

17

Se si utilizza NASM, la linea di comando è solo

nasm file.asm -o outfile 

dove 'file.asm' è il vostro file di assieme (codice) e 'outfile' è l'eseguibile che vuoi

Ecco qualche informazione in più:

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

È possibile installare NASM in Ubuntu con il seguente comando:

apt-get install nasm 

Ecco un Ciao Mondo in Linux il montaggio di base per stuzzicare l'appetito :

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

Spero che questo sia quello che stavi chiedendo ...

+0

Hello World esempio è un collegamento interrotto! –

+0

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

47

Probabilmente l'assemblatore GNU è già installato sul tuo sistema. Prova a man as per vedere tutte le informazioni di utilizzo. È possibile utilizzare as per compilare singoli file e ld per collegare se davvero, davvero.

Tuttavia, GCC è un ottimo front-end. Può assemblare file .s per te. Ad esempio:

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

Il codice sopra riportato è AMD64. Sarebbe diverso se sei ancora su una macchina a 32 bit.

È inoltre possibile compilare il codice C/C++ direttamente al montaggio se siete curiosi come funziona qualcosa:

$ 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

C'è anche FASM per 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 

E comiles con

fasm hello.asm hello