Botta e risposta: FAQ per Assembly

Una raccolta delle più disparate domande che ho ricevuto via e-mail e che potrebbero essere utili prima di affrontare il corso.

Che conoscenza è richiesta?

Per affrontare il corso con serenità e non impazzire alle prime righe di codice, è necessario avere un infarinatura di base riguardo all’architettura degli elaboratori (le componenti base) e programmazione iterativa. Le nozioni verranno riprese mano a mano che il lettore si addentrerà nel corso; altrimenti Google è tuo amico!

Cosa mi serve per il corso?

Per il corso, oltre ad una buona dose di pazienza, ti serve una qualsiasi macchina che possa supportare il 32 bit (o l’emulazione di ambienti Intel-like a 32 bit). Utilizzeremo l’assemblatore integrato di default in tutte le piattaforme Unix-like, as e il linker ld. È consigliato inoltre disporre di un buon IDE grafico (no, non serve Word!).

Sto utilizzando MacOS Catalina o versioni successive..

Purtroppo Apple ha rimosso a partire da MacOS Catalina la possibilità di eseguire binari a 32 bit (per il momento affrontiamo solo programmazione a basso livello a 32 bit). In alternativa, una qualsiasi macchina virtuale a 32 bit potrebbe andare bene (consiglio: una qualsiasi distro unix-based! Vi agevolerà molto il lavoro).

Per i più curiosi, assemblare un qualsiasi programma (anche con le flag --static e --arch i386), produrrà il seguente errore:

bad CPU type in executable

Che sintassi useremo per il corso?

Per assembly, le due sintassi maggiormente utilizzate sono la GAS syntax e la Intel syntax. In questo corso, si utilizzerà maggiormente la syntax di Intel; introdurremo una sezione riguardo le principali differenze tra una sintassi e l’altra in modo da dare allo studente una conoscenza a 360 gradi.

Intel 8086? Siamo negli anni 90?

No, assolutamente. Il corso vuole essere esclusivamente didattico: perché introdurre un’architettura moderna che potrebbe richiedere più tempo ed conoscenze più approfondite? È caldamente consigliato al lettore più esperto approfondire le architetture (ARM, x86_64, AMD), utilizzando i manuali d’uso sul Web.

Perchè un altro corso su Assembly?

Gli altri corsi sono spesso caotici e confusionari (ad esempio, comprendono spesso C e Assembly insieme oppure richiedono conoscenze di hardware) e non hanno un approccio modulare. Fatte alcune eccezioni, in generale non sono soddisfatto di quello che ho trovato sul Web, quindi cercherò di tra-scrivere parte degli appunti che sono riuscito a imparare su Assembly, basandomi sulla mia esperienza da studente.

Non pretendo di essere voce di verità per nessuno, anche se ogni commento riguardo gli errori è ben apprezzato!

Hai altre domande? Scrivimi un’email.

Biografia

Sono uno specialista in materia di sicurezza informatica, scrittore, contributore per il progetto Monero, una criptovaluta che è focalizzata nel proteggere le informazioni sulle transazioni. Il libro che ho pubblicato Mastering Monero è diventato una delle migliori risorse per padroneggiare Monero. Più informazioni su di me

Seguimi su Twitter o scrivimi una e-mail. Le donazioni sono molto apprezzate, mi permettono di continuare a lavorare e a scrivere.

Mastering Monero Book