ASM Aiuto non sto capendo più niente

Stato
Discussione chiusa ad ulteriori risposte.

Il_Ribelle

Utente Bronze
24 Gennaio 2017
37
12
2
35
Ciao a tutti.
Ho una buona conoscenza del linguaggio C ma sto continuando ad approfondirlo, nel frattempo volevo iniziare qualcosa in Java ma mi è stato fortemente consigliato l'Assembly.
E qui ho perso la testa.
Non ci capisco niente.
Ho cercato guide visto tutorial letto libri capito la differenza tra Assembly e Assembler e anche che ci sono più tipi di Assembly ma nessuno che riesca a spiegarmi come programmare.
Ho capito cos'è un registro ma come faccio a farci una somma?!?!
Il tipo di Assembly a cui sono interessato è l'8086.
Mi è stato consigliato il libro "Programmare in Assembly per computer ibm" della Jackson ma è introvabile.
Grazie in anticipo.
 
Ciao a tutti.
Ho una buona conoscenza del linguaggio C ma sto continuando ad approfondirlo, nel frattempo volevo iniziare qualcosa in Java ma mi è stato fortemente consigliato l'Assembly.
Non capisco cosa vuol dire questo, normalmente si sceglie il linguaggio in base a quello che si vuole fare.
Se stai iniziando con Java e qualcuno ti consiglia Assembly, dovresti immediatamente porre la stessa domanda a qualcun altro perchè evidentemente hai chiesto alla persona sbagliata.
Prima di proseguire con la discussione e consigli vari, cosa devi esattamente fare?
Se ci spieghi per bene cosa vuoi imparare e il perchè, riusciremo a indirizzari meglio verso la giusta direzione, così da evitare perdite di tempo ma soprattutto confusioni.

L'assembly, comunque, è un linguaggio di programmazione a basso livello. Significa che è molto vicino al linguaggio macchina.
In particolare, le istruzioni che scrivi in assembly sono direttamente eseguibili dal processore, a differenza di tutti gli altri linguaggi che vanno interpretati o compilati per essere eseguiti.
 
Non capisco cosa vuol dire questo, normalmente si sceglie il linguaggio in base a quello che si vuole fare.
Se stai iniziando con Java e qualcuno ti consiglia Assembly, dovresti immediatamente porre la stessa domanda a qualcun altro perchè evidentemente hai chiesto alla persona sbagliata.
Prima di proseguire con la discussione e consigli vari, cosa devi esattamente fare?
Se ci spieghi per bene cosa vuoi imparare e il perchè, riusciremo a indirizzari meglio verso la giusta direzione, così da evitare perdite di tempo ma soprattutto confusioni.

L'assembly, comunque, è un linguaggio di programmazione a basso livello. Significa che è molto vicino al linguaggio macchina.
In particolare, le istruzioni che scrivi in assembly sono direttamente eseguibili dal processore, a differenza di tutti gli altri linguaggi che vanno interpretati o compilati per essere eseguiti.

Quello che voglio fare è creare programmi che abbiano grafica e impara qualcosa per quanto riguarda l'hacking.
Cose che non sono collegate.
Per la grafica (Mia priorità) voglio imparare Java, per l'hacking mi serve l'Assembly (Appunto perchè è un linguaggio di basso livello e comanda il processore) in realtà voglio impare entrambi ma quando stavo iniziando il Java mi hanno convinto a studiare prima l'Assembly.
Di Assembly (8086) non capisco niente.
 
TI hanno consigliato male. L'assembly diffcilmente ti servirà anche per l'hacking, o per lo meno marginalmente. Io ti consiglio di andare avanti col java, lascia stare i consigli di chi non ha nemmeno capito la domanda che gli hai fatto.
 
L'assembly nell'hacking serve solamente alla creazione di shellcode (l'assembly dell'8086 è invece totalmente inutile). Ti consiglio di leggerti L'arte dell'hacking di Jon Erickson per maggiori informazioni
 
L'assembly nell'hacking serve solamente alla creazione di shellcode (l'assembly dell'8086 è invece totalmente inutile). Ti consiglio di leggerti L'arte dell'hacking di Jon Erickson per maggiori informazioni

È un libro che ho comprato da poco e finché tratta il C va tutto bene ma anche qui quando inizia a parlare di Assembly non ci capisco più niente...
All'inizio è tutto chiaro ma poinon mi perdo.
Grazie dei consigli quindi dovrei continuare col Java? Per quanto riguarda l'hacking cosa devo fare? Ho smesso di leggere il libro perché sono rimasto bloccato agli esempi in Assembly e poi ancora mi deve arrivare il volume 2 (ho l'edizione tascabile)
 
TI hanno consigliato male. L'assembly diffcilmente ti servirà anche per l'hacking, o per lo meno marginalmente. Io ti consiglio di andare avanti col java, lascia stare i consigli di chi non ha nemmeno capito la domanda che gli hai fatto.

Grazie quindi per te dovrei passare al Java e lasciar perdere l'Assembly?
 
Si, non è necessario essere dei maestri di assembly. Oltretutto l'assembly camba a seconda dell'architettura e oggi giorno ne usiamo molte diverse. Puoi sicuramente cercare di capire come funziona, ma senza sicuramente incentrarti troppo su quello.
 
Nel volume 2 ci sarà un intero articolo dedicato all'assembly per processori x86, ovvero a 32 bit, (precisamente il capitolo sarà incentrato sulla creazione degli shellcode) che spiegherà più nel dettaglio le istruzioni assembly. Per una descrizione abbastanza dettagliata ti consiglierei di aspettare il secondo volume e quindi di leggerti il capitolo "Shellcode". In linea generale, in assembly per fare ogni cosa devi utilizzare una istruzione, per esempio per sommare il contenuto di due registri c'è l'istruzione add:

Codice:
 add eax,ebx ;Calcola eax+ebx e mette il risultato in eax

come c'è un'istruzione per spostare il contenuto di un registro in un altro:

Codice:
 mov eax,ebx ;Copia il valore contenuto in ebx dentro eax

La lista completa di tutte le istruzioni assembly si trova sul manuale della AMD/Intel, ma dato che ne utilizzerai solo una minima parte ti consiglio sempre di leggerti il capitolo sugli shellcode che contiene anche una lista delle principali istruzioni. Ti consiglio di saltare per il momento gli esempi con l'assembly (puoi passare direttamente al capitolo 0x260 e continuare da lì) e puoi magari riprenderli quando arrivi al capitolo sugli shellcode. L'assembly ti servirà solo e solamente per la creazione degli shellcode, se non ti piacciono e non hai intenzione di studiarli allora puoi tranquillamente e senza rimorsi ignorarlo completamente.

Ti starai chiedendo, perché si utilizza l'assembly per scrivere shellcode? Semplicemente perché le contromisure adottate per limitare gli attacchi non permettono l'utilizzo di altri linguaggi (solamente i filtri basati sui caratteri stampabili riesce a bloccare una grande quantità di exploits scritti da gente poco esperta). Dubito fortemente che si possano scrivere shellcode funzionanti in Java.

Si, non è necessario essere dei maestri di assembly. Oltretutto l'assembly camba a seconda dell'architettura e oggi giorno ne usiamo molte diverse. Puoi sicuramente cercare di capire come funziona, ma senza sicuramente incentrarti troppo su quello.
Il mercato oramai è monopolizzato dall'AMD e dalla Intel e utilizzano entrambi un linguaggio assembly molto simile. Perfino mamma Apple è passata a processori Intel, e sto vedendo sempre più spesso cellulari con un processore Intel. Forse, in un futuro non troppo lontano, potremmo finalmente vedere uno standard per i microprocessori per computer/smartphone (se invece quardiamo ai microcontrollori o ai sistemi embedded allora è ovvio che i linguaggi assembly siano totalmente diversi).
 
  • Mi piace
Reazioni: mattstack
Forse, in un futuro non troppo lontano, potremmo finalmente vedere uno standard per i microprocessori per computer/smartphone (se invece quardiamo ai microcontrollori o ai sistemi embedded allora è ovvio che i linguaggi assembly siano totalmente diversi).
Anche io sarei molto felice che fosse così visto che ho dedicato anni allo studio dell'assembly per x86 e x86_64 e posso dire di conoscerlo decisamente bene.
E si, anche io la pensavo così fino a poco tempo fa, ma ora inizio a dubitarne molto consistentemente.
Anzi, aspettiamoci che società come NXP e STM (ma anche Microchip e Linear) tirino fuori quanto prima degli ARM personalizzati proprio per contrastare quello che si diceva sopra (passando anche dai microcontrollori a microprocessori potenti). Purtroppo di questo sono più che sicuro dal momento che ci lavoro e che l'ho sentito dire dagli stessi produttori più di una volta. Quindi dimenticatevi lo standard, quello non arriverà, non tanto presto per lo meno.
A parte questo, ci tengo a precisare che non ho assolutamente consigliato di non studiare l'assembly, ma sicuramente di studiarlo marginalmente ed all'occorrenza, questo sarà più che sufficiente.
 
Stato
Discussione chiusa ad ulteriori risposte.