PDA

View Full Version : [ASSEMBLY] da dove partire?


ramarromarrone
28-03-2008, 10:42
ciao a tutti
a tempo perso mi piacerebbe imparare a programmare in assembly x86(per cultura personale non per necessità vera e propria)
mi sapete consigliare qualche manuale gratis in internet (inglese o italiano), un editor con gli highlight asm, e un compilatore per creare l'eseguibile?(non so se va bene un comune compilatore c).

come os uso linux

grazie

dad_89
28-03-2008, 14:54
Pr l'edtor non posso aiutarti, non ne conosco, per il resto se prograrmi su linux gcc va bene anche per compilare sorgenti assembly, in alternativa c'è nasm (sempre sul inux), per le guide c'è ne sono di buone su pluto.it e poi qui (http://xoomer.alice.it/ramsoft/) quest'ultima credo sia ottima per iniziare.

mjordan
28-03-2008, 16:16
ciao a tutti
a tempo perso mi piacerebbe imparare a programmare in assembly x86(per cultura personale non per necessità vera e propria)
mi sapete consigliare qualche manuale gratis in internet (inglese o italiano), un editor con gli highlight asm, e un compilatore per creare l'eseguibile?(non so se va bene un comune compilatore c).

come os uso linux

grazie

Ciao. Ho tutto quello che fa per te e sei sul sistema operativo giusto. Per il libro ti consiglio VIVAMENTE "Programming from the ground up" di Jonathan Bartlett (poi ti dico pure perchè). L'assemblatore ce l'hai già (GNU As) che è l'assemblatore predefinito di GCC. Non serve usare GCC direttamente, per capire veramente le cose devi imparare anche il processo di linking, oltre che di assemblamento (tutto spiegato nel libro).
Per quanto riguarda l'editor, vale la pena secondo me imparare Emacs per lo scopo. Con la sequenza 'M-x compile', puoi specificare direttamente le direttive di assemblamento, linking senza preocuparti del resto. Riconosce inoltre la sintassi direttamente (basta passargli un file .s, .asm, .S per attivare in automatico l'asm-mode). Nel caso non lo facesse in automatico (improbabile) puoi attivarlo a mano mediante il comando 'M-x asm-mode'

A questo punto direi che hai tutto e passiamo al libro. Perchè è il miglior libro di assembly sulla piazza? Semplicemente perchè:
1) E' libero (e quindi gratuito).
2) Non ti fa due palle cosi sull'architettura x86, ma introduce i concetti solo quando servono e, cosa importantissima, gradualmente. La maggior parte dei libri che ho letto su asm sono molto pallosi e non arrivano mai al punto: sono piu' libri di architettura che di asm in se. Questo è un'approccio sbagliato che porta a stancarti prima di raggiungere effettivamente un programma che sia funzionale. Ok, conosco i registri, conosco le sezioni, conosco gli indirizzamenti... Ma come caxxo si scrive un hello world? Ecco, questa è una situazione che il libro NON ti presenterà mai.
3) E' uno dei pochi libri che tratta l'assembly visto dal mondo Linux. La maggior parte dei libri asm tratta ancora l'obsoleto asm dos, al quale magari nemmeno sei interessato (non so nemmeno dove reperire il microsoft assembler) senza contare che altri invece trattano addirittura il turbo assembler :asd: . Fare il porting di quel codice sotto Linux è tremendo e richiede un'ottima conoscenza di entrambi i mondi (risorse mentali sprecate, a mio avviso).
4) E' completo, non esaustivo. Quando si parla di asm, avere la pretesa di essere esaustivi è semplicemente stupido: diffida sempre dai libri in questo campo che si propongono di insegnarti "tutto". L'assembly non è una cosa che nessun essere umano possa dire "lo conosco tutto", "so fare tutto in assembly", ecc. ecc. E' pure una cosa che evolve di continuo. Qui chiaramente si parla del processore x86 e si rimane confinati in questo ambito.
5) Tratta argomenti piu' avanzati che comunque sono necessari e fa la differenza fra uno che l'assembly "lo sa" da uno che ha scritto solo un hello world e ha capito come fare un'indirizzamento: le chiamate alle system call del kernel e addirittura alle funzioni di libreria (fa un fantastico esempio di come scrivere una piccola GUI chiamando funzioni GTK+ direttamente dal codice asm).
6) Non è mai troppo difficile o troppo impegnativo. Il linguaggio è chiaro, i concetti sono messi gradualmente, ti guida sempre in tutto quello che devi fare e sapere, le esemplificazioni non sono mai banali ...
7) Tratta lo GNU Assembler. Sebbene non sia mai stato nominato come il miglior assemblatore per programmazione manuale, per imparare è fantastico. Ultimamente è diventato pure piu' loquace, quindi i messaggi di errore sono piu' comprensibili rispetto al passato. Una volta che lo conosci, poi, passare ad un'altra sintassi è uno scherzo e il vantaggio che ne ottieni è che potresti scrivere semplici programmi in C per confrontare l'output generato dal compilatore con quello che avresti scritto a mano. :)

Spero di essere stato chiaro (e di aiuto). Ops, il link del libro:

http://download.savannah.nongnu.org/releases/pgubook/ProgrammingGroundUp-1-0-booksize.pdf

ramarromarrone
28-03-2008, 16:42
grazie mille a tutti!