Il linguaggio Assembly è un basso Linguaggio di programmazione. I linguaggi di programmazione di basso livello sono
vicino al linguaggio macchina, non portatile e con quasi no astrazione. Per farvi capire python e ruby sono linguaggi di alto livello.
Il linguaggio assembly è uno strato intermedio tra codice macchina e (quasi) tutti i linguaggi di alto livello. Linguaggi di alto livello che richiedono una macchina virtuale (come JAVA) hanno un approccio diverso. La macchina virtuale viene eseguita
il codice e potrebbe convertirlo in Assembly quindi Machine codice in fase di esecuzione utilizzando un compilatore JIT (Just In Time
compilatore). JVM (Java Virtual Machine) è scritto in C ++
Ci sono molti linguaggi di programmazione di alto livello che fanno la vita degli sviluppatori è più facile e, per alcuni sviluppatori, questi
linguaggi rendono lo sviluppo di applicazioni un’arte e un divertimento. È molto più facile creare programmi di alto livello con questi linguaggi, inoltre è più facile sia eseguire il debug che mantenere il costo e seguimento. Unico utilizzo ancora pratico è nel malware analisi, ma anche per driver o applicazione che lavorando tra hardware/kernel oppure parti di software specifiche.
Il linguaggio assembly è stato necessario per un tempo piuttosto lungo, per creare un codice ottimizzato per motivi di prestazioni.
Ma con i compilatori moderni forniti con intelligent e ottimizzatori, l’utilizzo di una lingua di basso livello è diminuito!
Come abbiamo detto, uno degli usi migliori è per:
Durante il debug del software, miriamo al processo in esecuzione e dobbiamo capire il codice eseguibile (il codice macchina).
Leggere questo codice come istruzioni di assembly è molto più semplice che leggere sequenze di infiniti numeri esadecimali
( byte code). Imparare il linguaggio Assembly ci aiuterà a capire il comportamento di questo programma durante l’esecuzione a livello di CPU e memoria, stack, e con tale conoscenza possiamo deviare il codice durante esecuzione per prendere altri percorsi che soddisfano la nostra analisi. O ancora a livello di malware portarlo a decodificarlo in memoria e poi leggerlo.. in caso di packer o compressione.