2010-07-23 18 views
50

Ich bin ziemlich neu in Linux (Ubuntu 10.04) und ein absoluter Neuling für Assembler. Ich habe einige Tutorials verfolgt und konnte nichts speziell für Linux finden. Also, meine Frage ist, was ist ein gutes Paket zum Kompilieren/Ausführen von Assembler und was sind die Befehlszeilenbefehle zum Kompilieren/Ausführen für dieses Paket?Kompilieren/Ausführen Assembler in Linux?

+0

Ich bin im selben Boot. Ich habe Asm unter Linux nie richtig verstanden, weil es keine echte Präsenz gibt. Vielleicht liegt es daran, dass Cracking bei Windows der letzte Schrei ist. –

+0

Diese beantworten meine Frage nicht vollständig. Ich möchte immer noch wissen, welche Konsolenbefehle Sie verwenden würden, um Programme in NASM oder Gas zu kompilieren und auszuführen. –

+0

Meine Vorliebe ist NASM. Ich gebe dir ein paar Informationen darüber, wie man es unter Ubuntu einrichten kann. – Justin

Antwort

40

Die GNU-Assembler (Gas) und NASM sind beide eine gute Wahl. Sie haben jedoch einige Unterschiede, die große ist die Reihenfolge, in der Sie Operationen und ihre Operanden setzen.

Gas verwendet AT & T Syntax:

mnemonic source, destination 

nasm nutzt Intel-Stil:

mnemonic destination, source 

Entweder man wird wahrscheinlich tun, was Sie brauchen.

dieses Tutorial ausprobieren: http://asm.sourceforge.net/intro/Assembly-Intro.html

+0

Danke, dieses Tutorial ist großartig, da es Linux-spezifisch ist. Außerdem hatte das Tutorial sehr spezifische Anweisungen zum kompilieren und ausführen von Assembler progs in linux –

+1

Gas hat ".intel_syntax" für eine Weile unterstützt - ich würde persönlich immer noch fasm, yasm oder nasm verwenden. – snemarch

17

Wenn Sie NASM verwenden, ist die Befehlszeile nur

nasm file.asm -o outfile 

wo 'file.asm' ist die Assembly-Datei (Code) und 'outfile' ist die ausführbare Datei, die Sie wollen. Hier

einige weitere Informationen:

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

Sie können mit dem folgenden Befehl NASM in Ubuntu installieren:

apt-get install nasm 

Hier ist eine einfache Hallo Welt in Linux Montage Appetithäppchen :

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

Ich hoffe, das ist, was Sie gefragt haben ...

+0

Hallo Welt Beispiel ist ein defekter Link! –

+0

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

47

Der GNU-Assembler ist wahrscheinlich bereits auf Ihrem System installiert. Versuchen Sie man as, um vollständige Nutzungsinformationen zu sehen. Sie können as verwenden, um einzelne Dateien zu kompilieren und ld zu verknüpfen, wenn Sie wirklich, wirklich wollen.

Allerdings macht GCC ein großartiges Front-End. Es kann .s Dateien für Sie zusammenstellen. Zum Beispiel:

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

Der obige Code ist AMD64. Es wäre anders, wenn Sie noch auf einer 32-Bit-Maschine sind.

Sie können auch C/C++ Code direkt Montage kompilieren, wenn Sie neugierig sind, wie etwas funktioniert:

$ 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

Es ist auch FASM für 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 

Es comiles mit

fasm hello.asm hello