Programmazione assembly in linux - breve introduzione
Pubblicato da Ritz il 18/05/2000
Livello base
Introduzione
Siete stufi del solito Windoze asm? Bene, è venuto il momento di migrare a Linux e provare a vedere da lì cosa si può fare di bello con questo linguaggio.
NOTA: molto di questo materiale lo potere trovare sul Linux Assembly HOWTO (prelevabile sul nostro sito): questo testo ne rappresenta un breve riassunto e riadattamento in italiano con alcune aggiunte.
Iniziamo
Questi tute dovrebbero iniziare con frasi del tipo "Linux ormai è un sistema operativo che rappresenta una valida alternativa..." bla bla bla, ma queste cose non penso che vi interessino troppo, visto che se state leggendo questo testo significa che usate già Linux e vi interessa iniziare a programmare in asm pure da qui, o quantomeno siete interessati all'argomento.
Per "introduzione" all'asm coding under Linuz non intendo una spiegazione dalle *basi* dell'asm, cose tipo architettura dei processori x86 e loro set di istruzioni devono già essere nel drive hdabrain di chi legge.
Similmente, non starò qui a spiegare i motivi per cui in Linux bisognerebbe programmare in asm quando esso è basato (+ di Win) su altri linguaggi, C in primis. Btw, come per ogni SO la programmazione in asm al 90% non è una questione di necessità (salvo casi particolari naturalmente), bensì una scelta che si fa per passione e curiosità personale, certo usare l'asm per fare *ogni* cosa sarebbe alquanto scomodo e lungo, anche se i risultati finali sarebbero eccellenti.
Fatta questa (pallosa lo so:) ) premessa, iniziamo a vedere un po' di cosette per programmare in asm sotto tale sistema.
First of all, ci serve un compilatore (a meno di non andare avanti a scrivede opcode con BIEW;)), quelli più usati sono 2, il GAS e il NASM.
In GAS (GNU Assembler), scaricabile da ftp://ftp.varesearch.com/pub/support/hjl/binutils/ (cmq è compreso nel GCC), è stato progettato inizialmente come compilatore 32 bit sotto unix, il che comporta una particolarità: esso utilizza la sintassi AT&T, e non quella Intel, e qui possono essere dolori per uno che ha già programmato in asm sotto Win32 o DOS. Infatti, una delle regole di tale sintassi è che il registro di destinazione in un'istruzione deve essere SEMPRE il secondo... se infatti noi volessimo copiare ebx in eax non dovremmo scrivere mov eax, ebx, bensì mov ebx, eax... e questo fatto potrebbe esser fonte di casini per i primi tempi. Altre caratteristiche di tale sintassi sono:
Per il linker, invece, non ci sono problemi, in quanto potete usare sia ld che gcc, entrambi compresi in qualsiasi distribuzione di Linux.
Come introduzione penso che possa andar bene, se volete maggiori info leggete il Linux Assembly HOWTO.
I vari link che nella versione orignale del tute sarebbero dovuti essere presenti qui sotto potrete trovarli nella sezione apposita del sito;).
Conclusioni
Spero che molti, leggendo questo breve essay, si siano interessati alla programmazione a basso livello soto Linux, che penso sia molto interessante, forse proprio per il fatto che è un terreno ancora poco esplorato.
Per domande/richieste, proposte varie e così via scrivete al solito indirizzo [email protected].
Byz all, Ritz
Attenzione
Le informazioni contenute all'interno di questo documento sono a puro scopo didattico. L'autore non incoraggia chi volesse utilizzarle per scopi illegali.