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?
risposta
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
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. –
gas ha supportato ".intel_syntax" per un po '- Personalmente avrei comunque usato fasm, yasm o nasm. – snemarch
L'assemblatore (GNU) è come (1)
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 ...
Hello World esempio è un collegamento interrotto! –
http://www.tldp.org/HOWTO/Assembly-HOWTO/hello.html#AEN867 – imbellish
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
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
Il mio suggerimento sarebbe quello di ottenere il libro di programmazione Da Ground Up:
http://nongnu.askapache.com/pgubook/ProgrammingGroundUp-1-0-booksize.pdf
Questo è un ottimo punto di partenza per entrare in assembler programmazione sotto linux e spiega molte delle nozioni di base che devi capire per iniziare.
3 sintassi (nasm, tasm, gas) in 1 assemblatore, yasm.
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. –
Questi non rispondono completamente alla mia domanda. Voglio ancora sapere quali comandi console useresti per compilare ed eseguire programmi in NASM o gas –
La mia preferenza è NASM. Vi do alcune informazioni su come farlo funzionare su Ubuntu sotto. – Justin