Assembler Programmierung

Silvos

Silvos

Eroberer
Hallo, ich würde gerne Assembler lernen.
Welche Programme brauche ich dazu?
Kennt ihr gute Tutorial?
Was würdet ihr mir sonst noch raten?
Ich habe Slackware Linux.

Danke.
 
hi,

The art of assembly:
http://webster.cs.ucr.edu/

The art of assembly ist ein ziemlich bekanntes Buch zum Thema, frei verfuegbar, und _sehr_ umfangreich ;)
Solltest du das jemals durch haben, brauchst du wahrscheinlich kein 2tes Buch zum Thema mehr ;)
Und vor allem gibt es auf der Webseite auch einiges zum Thema assembly unter Linux.

Aber kannst du schon C? Weil imho ist es leichter erst C zu lernen, und dann assembly, aber das ist natuerlich Geschmacksache, wahrscheinlich wird es auch Leute geben die das Gegenteil behaupten.

Welche Programme brauche ich dazu?
Unter Linux wird meistens gas (GNU Assembler) benutzt, der im uebrigen Teil der gcc suite ist. Es gibt aber noch wesentlich mehr (z.B. nasm), das haengt vor allem auch davon ab, welchen Stil du programmieren moechtest, gas benutzt naemlich eine andere Syntax als die meisten anderen Assembler.
Einfach mal in das Thema einlesen...

edit:
Ahja, mir war der Name der gas Syntax entfallen. Der gas benutzt die AT&T Syntax, wohingegen die meisten anderen Assembler die Intel Syntax benutzen.
Die inline assembly Stellen im Linux Kernel werden aber z.B. mit dem gas geschrieben, und sind deswegen in der AT&T Syntax. Welche du davon erstmal lernen willst ist also auch von der Platform abhaengig auf der du schreiben willst, und wofuer du es spaeter benutzen willst.

edit2:
Ich bin mir grad nicht mehr sicher ob fuer den Linux Kernel tatsaechlich gas zum Uebersetzen benutzt wird, es kann sein dass das immer noch as86 ist, aber das weiss ich nicht, und ist auch nur ein Detail am Rande. Es ist jedenfalls AT&T Syntax ;)

Viel Spass damit,
bytepool
 
Zuletzt bearbeitet:
Also ich finde das Buch pcasm ganz gut.
Ausserdem moechte ich noch inzufuegen, dass auch der GNU as Intel Syntax kann. Weiss aber nicht mehr genau wie.
 
Ausserdem moechte ich noch inzufuegen, dass auch der GNU as Intel Syntax kann.

Ja, das ist richtig, da gibt es irgendwie einen switch fuer, muesste ich auch erst nachgucken wie der nochmal hiess, aber dann kann man auch gleich nasm nehmen, oder? ;)

edit:
Achne, scheinbar doch nicht einfach nur ein switch:
Good news are that starting from binutils 2.10 release, GAS supports Intel syntax too. It can be triggered with .intel_syntax directive. Unfortunately this mode is not documented (yet?) in the official binutils manual [...].
Quelle: http://www.tldp.org/HOWTO/Assembly-HOWTO/gas.html

mfg,
bytepool
 
Zuletzt bearbeitet:
@bytepool

Danke für den Link, das Seitendesign ist zwar wirklich grauenhaft, aber das Buch sieht sehr gut aus....
 
Ich habe es zwar nicht gelesen, aber den HLA, den dieses Buch verwendet, wuerde ich nicht nehmen.
SO sieht kein Assemblercode aus.
 
Ich habe es zwar nicht gelesen, aber den HLA, den dieses Buch verwendet, wuerde ich nicht nehmen.
SO sieht kein Assemblercode aus.

Hehe, ja, das ist nicht ganz falsch, die neuere Variante behandelt halt High Level Assembly, ein Versuch Assembler Portabel zu machen.
Ich habe hier noch eine alte Fassung des Buchs als pdf auf der Platte, in der noch "normales" assembly behandelt wird.
Das hier sollte noch eine alte Fassung des Buches sein:

http://maven.smith.edu/~thiebaut/ArtOfAssembly/artofasm.html
http://www.arl.wustl.edu/~lockwood/class/cs306/books/artofasm/toc.html

mfg,
bytepool
 
Aber kannst du schon C? Weil imho ist es leichter erst C zu lernen, und dann assembly, aber das ist natuerlich Geschmacksache, wahrscheinlich wird es auch Leute geben die das Gegenteil behaupten.

Ja, ich kann schon c bzw. c++.

Ich habe noch eine Frage:
Ich habe eine Hello World in assembler, mit nasm übersetzt und jetzt habe ich eine Binärdatei.
Wie führe ich diese aus?
Kann man dowas überhaupt wie ein normales Programm ausführen?
 
Also man uebersetzt normalerweise mit:
nasm -f elf input.s -o output.o
ld output.o -o output oder gcc output.o -o output
Ausfuehren mit ./output, wie gewohnt.
 
Bei mir, unter Slackware Linux, gibt es kein ld und gcc gibt die Meldung
collect2: cannot find 'ld'
.
Gibt es ein anderes Programm wie ld welches bei Slackware standartmäßig dabei ist?
 
ld MUSS dabei sein. Das gehoert zu den binutils.
 
ld != ldd

Und wie weiter oben schon geschrieben, ld muss eigentlich vorhanden sein, auch bei SuSE ist es übrigens im Paket binutils enthalten.

Also unbedingt ld über Deinen Paketmanager nachinstallieren, wahrscheinlich heisst das Paket auch unter Slack "binutils".

Code:
which ld
könnte ausserdem weiterhelfen.
 
Ich habe mir binutils runtergeladen, installiert und es geht.

Danke an alle.
 

Ähnliche Themen

Welche Distro wie RHEL (Tools & Repos)?

Kernel Kaltstart / reboot?

Läuft eine Unix-Variante auf PC aus dem Jahr 2015, der nicht Windows-11-fähig ist?

Warum gibt es keine Moderne Email Client auf Linux?

Welche Distri für Programming from the Ground Up

Zurück
Oben