CAPITOLO 4: BASI DI ASSEMBLY

Save this PDF as:
 WORD  PNG  TXT  JPG

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "CAPITOLO 4: BASI DI ASSEMBLY"

Transcript

1 CAPITOLO 4: BASI DI ASSEMBLY x86 Un giorno a qualcuno venne in mente di creare un processore 8086, che si è poi evoluto ed è diventato il più veloce 80286, meglio conosciuto come 286, che a sua volta ha lasciato spazio al 386 che a sua volta ha dovuto lasciare spazio al 486 (66 MHz) e poi è cominciata la serie Pentium (il mio vecchio ), fino ad arrivare al Pentium IV (che va a 3,6 GHz un pochino di più).un processore esegue un algoritmo (o programma) e fa solo questo per tutta la sua vita. Questo programma gli viene passato con un linguaggio di basso livello comprensibile (solo) al processore e viene interpretato ed eseguito: questo linguaggio, almeno per quanto riguarda le istruzioni base, è ancora quello del vecchio 8086 e comunque ogni programma compilato, dal C o da qualsiasi linguaggio di alto livello (ovvero comprensibile al programmatore), contiene istruzioni scritte in linguaggio macchina, tanto è vero che se apriamo col notepad un file exe (eseguibile) ci capiamo poco o niente. Ora scarichiamo un programma che si chiama disassemblatore (disassembler), il quale traduce in un linguaggio più comprensibile (questo è tutto da vedere) il programma compilato: questo linguaggio è l assembly (e diciamo il compilatore è detto assembler). Scrivere un programma in linguaggio macchina non era semplice e il primo linguaggio di programmazione di alto livello è stato appunto l assembly. Prima di passare del linguaggio però c è qualcosa che dovete sapere. Prima di tutto, spero conosciate le basi: la base 2 (numeri binari), la base 16 (numeri esadecimali), ma anche la base 8 (numeri ottali)... spero sappiate almeno la base NOTA: Io non vi spiegherò come si fa un programma in assembly, ma vi fornirò le basi necessarie per capire cosa fa un programma, nel caso molto frequente di doverlo decompilare ed esaminare, per esempio per crackarlo o per trovare un possibile exploit. CICLO DEL PROCESSORE Un processore dopo il bootstrap (ovvero una fase di avvio) entra in un ciclo a cui si pone fine solo con lo spegnimento. Questo ciclo è detto ciclo del processore e in linee generali è il seguente Nella fase di FETCH prende la prossima istruzione (incrementando un registro detto PC, Program Counter) e poi la esamina e ne carica gli operandi nella fase detta OPERAND ASSEMBLY ed infine la esegue nella fase di EXECUTE e poi va alla prossima istruzione. Però in questo modo potremmo eseguire solo un programma per volta e, per esempio, dover aspettare ogni volta che termini la lettura/scrittura da/a una periferica. Questo inconveniente è ovviato dalle interruzioni. Dopo EXECUTE c è un ulteriore controllo di interruzione: se si è verificato un evento, ad esso è associata un interruzione (con una priorità pre-assegnata). Se si

2 verifica un interruzione, viene richiamata la rispettiva funzione (da qualche parte in memoria) e si passa alla sua esecuzione, sospendendo la precedente, se naturalmente ha una precedenza maggiore. REGISTRI Il processore oltre alla memoria RAM (o memoria centrale), ha a disposizione una serie di registri dove memorizza il suo stato (istruzione corrente, contatore di istruzioni,...) e i dati che devono essere elaborati. Con i registri inoltre esso si interfaccia alle periferiche e alla memoria centrale stessa (la RAM per intenderci). - REGISTRI DI USO GENERALE: AX, BX, CX, DX sono i tipici registri di utilizzo generale a 16 bit, utilizzati per memorizzare operandi e indirizzi di memoria. Nei moderni processori essi rappresentano i primi 16 bit (bassi) dei rispettivi registri a 32 bit (usati nelle applicazioni moderne) EAX, EBX, ECX, EDX. A loro volta possono essere divisi in registri da 8 bit. Prendiamo per esempio AX. Esso può essere suddiviso in AH e AL, ovvero la sua parte alta (high) e la sua parte bassa (low) che corrispondono rispettivamente agli 8 bit più alti (quelli più a sinistra) e a quelli più bassi (quelli più a destra). - REGISTRI STRINGA: o anche registri puntatore, sono registri a 16 bit e contengono puntatori a stringhe. Essi sono SI, DI. Sono usati per copiare, confrontare, spostare stringhe. - REGISTRI ISTRUZIONE: IP (istruction pointer), registro che punta all istruzione corrente. - REGISTRI DI STACK: ovvero registri che servono per gestire quell area di memoria che è organizzata secondo la politica a pila. Sono BP (base pointer, punta alla base dello stack) ed SP (stack pointer: punta alla testa dello stack). - REGISTRO FLAG: un registro che non si può utilizzare e che contiene informazioni sullo stato del processore dovuto all esecuzione delle operazioni precedenti; queste informazioni sono rappresentate dai singoli bit del registro. I flags sono: o, d, i, t, s, z, a, p, c. A seconda se sono 0 o 1 ogni flag assume un significato diverso. c carry flag bit che ci dice se c è riporto p parity flag bit di parità a auxiliary carry flag z zero flag l ultima operazione ha dato zero s sign flag bit del segno (positivo o negativo) o overflow flag si è verificato un overflow i interrupt enable abilitazione generale degli interrupt d direction flag t trap flag Lo zero flag viene settato dopo ogni confronto e assume 0/1 a seconda dell istruzione utilizzata per il confronto ed è quello che si deve vedere, per esempio, se si vuole sapere se una stringa immessa è uguale ad un altra. - REGISTRI DI SEGMENTO: La memoria di uno 8086 è divisa in blocchi da 64 Kb, poiché può indirizzare solo 16 bit e dunque abbiamo 2 16 = = 64 Kb (nei processori moderni un blocco sarebbe 2 32 = 4Gb). Se vogliamo accedere ad 1 Mb di memoria ci servirebbero 20 bit, ma noi abbiamo registri a 16 bit. Per ovviare a questo inconveniente, si ricorre ai segmenti e agli offset (per indirizzare dobbiamo dunque utilizzare due registri).

3 Un segmento rappresenta l indirizzo del blocco utilizzato in quel momento. Per conoscere la posizione all interno del segmento, si usa un offset. Il segmento viene messo in DS e l offset in SI e si usa la coppia DS:SI e la notazione standard è proprio separare i due valori con i due punti. I registri di segmento sono: CS code segment contiene il codice da eseguire DS data segment contiene i dati da trattare ES come DS, usato per confrontare le stringhe SS stack segment LO STACK DI SISTEMA Lo stack (o pila, tipo quella di libri sulla mia scrivania ) è una parte di memoria fisica, organizzata a livello logico con la politica LIFO su cui si possono fare due operazioni: - immissione in testa (push): inserisce un valore in cima allo stack (come mettere un altro libro sugli altri) - estrazione dalla testa (pop): estrae (ovvero legge e successivamente elimina) un valore dallo stack (è come prendere il libro in cima, leggerlo e poi bruciarlo ) Dal punto di vista della programmazione, ci interessa sapere come cambia il registro che punta alla testa (o cima) dello stack e quali sono i confini di quest area di memoria. Quando facciamo il push di un valore sullo stack, esso viene salvato nella posizione di memoria a cui punta attualmente il registro SP; dopo aver inserito tale valore, SP viene decrementato di tanti byte quanti sono quelli del valore immesso, di solito, poiché si fa il push di registri, si tratta di 16 bit (o 32 bit). L altro registro, BP, contiene il più basso valore che può avere SP e quando si giunge a tale valore, si verifica un overflow dello stack. REGISTRI DI SEGMENTO La memoria viene (come già accennato) scomposta in parti dette segmenti: ogni valore si troverà sicuramente in un segmento e disterà da quella posizione di memoria di un certo spiazzamento (offset). Quindi per accedere ad un valore in memoria dobbiamo dare al processore due informazioni, segmento e offset, scrivendole in questo modo: [segmento:offset] Per aiutarci nella programmazione, sono stati realizzati dei registri di segmento, che si riferiscono da un determinato segmento di memoria e ci permettono di accedere alla memoria solo indicando lo spiazzamento. Come detto prima, i registri di segmento sono CS, DS, ES, SS: - Stack Segment (SS) è il segmento in cui si trova il valore che si vuole inserire nello stack; - Data Segment (DS) è il registro che contiene i dati da trattare, ovvero la parte di memoria a cui accedere. Nella pratica, serve per specificare il segmento di memoria a cui accedere, e se non specificato il suo valore (è specificato solo l offset), si assume quello contenuto in DS come default per il segmento; - Extra Segment (ES) si utilizza come registro di scorta (extra): se voglio accedere ad un altro segmento, senza cambiare i valori degli altri registri di segmento, utilizzo questo registro; - Code Segment (CS) è il segmento di memoria dove si trova il codice eseguibile. LINGUAGGIO ASSEMBLY Un istruzione assembly è formata da un operatore seguito da uno o più operandi. Nel caso di un programma decompilato (o di cui si sta facendo il debug), si ha una cosa del genere: indirizzo operatore operando1,operando2,...,operandon

4 Gli operandi, che per quello che studiamo sono due o al massimo tre, possono essere registri (che andiamo ad indicare con l abbreviazione reg), indirizzi di memoria (mem), oppure numeri (scritti in una base qualsiasi: naturalmente dobbiamo dire al processore in quale base ragioniamo). Gli operatori sono di solito abbreviazioni di parole inglesi che rispecchiano l operazione che eseguono; noi non vedremo come funzionano in pratica, ma daremo solo un cenno al loro funzionamento. OPERATORE DI SPOSTAMENTO Permette di trasferire dei dati dalla memoria ai registri e viceversa oppure spostare in memoria valori costanti. Avrà una sintassi del genere: MOV destinazione,sorgente Quello che non si può fare è uno spostamento diretto memoria-memoria, ma bisogna passare per un registro OPERATORI ARITMETICI ADD destinazione,sorgente Somma i due operandi (sorgente e destinazione) e mette il risultato in destinazione, ovvero fa una cosa del genere: destinazione = sorgente + destinazione, cosa che in C++ coincide con l operatore += : destinazione += sorgente SUB destinazione,sorgente Sottrae il valore di sorgente da destinazione e mette il risultato in destinazione, ovvero equivale a fare: destinazione = destinazione sorgente MUL sorgente Mentre addizione e sottrazione non danno in teoria numeri più grandi di un registro, il risultato del prodotto tra due numeri può non entrare in un solo registro, ma può occorrere più di un registro per contenere il risultato e per logica questo registro deve essere un accumulatore. L operatore di moltiplicazione esegue una moltiplicazione tra il valore o la locazione di memoria o il registro sorgente e una parte o tutto il registro EAX. Un registro accumulatore, quale EAX è diviso come segue

5 Quindi se il valore contenuto nella sorgente è lungo 8 bit la sorgente viene moltiplicata per AL, se il valore è lungo16 bit la moltiplicazione verrà fatta per AX, mentre per un valore lungo 32 bit la moltiplicazione è per EAX. Il risultato va a finire in una coppia di registri che a seconda delle dimensioni degli operandi, possono essere AH:AL, DX:AX, oppure EDX:EAX. Per esempio se consideriamo un risultato in DX:AX, DX contiene la parte alta del risultato ovvero i bit [31,16], mentre AX la parte bassa [15,0]. Quindi se scegliamo di moltiplicare MUL BX dove BX è di 16 bit, avremo DX:AX = AX * BX DIV sorgente Divide il contenuto dei registri AH:AL, DX:AX, EDX:EAX per il valore della sorgente e pone il risultato a seconda dei casi in AL, AX o EAX. Quello che viene memorizzato è un valore intero; non c è arrotondamento, ma troncamento all intero immediatamente inferiore. Per esempio se facciamo11/2 nel registro di destinazione troveremo 5. Il resto è memorizzato dove prima c era la parte alta del dividendo, ovvero in AH, DX o EDX. OPERATORI BOOLEANI AND destinazione,sorgente Fa l AND dei singoli bit di destinazione e sorgente e mette il risultato in destinazione. OR destinazione,sorgente Fa l OR dei singoli bit di destinazione e sorgente e mette il risultato in destinazione. XOR destinazione,sorgente Fa lo XOR dei singoli bit di destinazione e sorgente e mette il risultato in destinazione. NOT operando Nega logicamente i bit dell operando e mette il risultato in operando. OPERATORI DI INCREMENTO E DECREMENTO INC registro Incrementa un registro di 1 DEC registro Decrementa un registro di 1 OPERATORI PER LO STACK

6 PUSH operando Mette nella locazione di memoria SS:[SP] il valore dell operando e modifica il registro SP secondo la dimensione di tale operando. POP destinazione Estrae dallo stack l ultimo valore inserito (seguendo la politica LIFO: Last-In-Frist-Out) e lo memorizza nella destinazione e modifica il registro SP secondo la dimensione di tale operando. I FLAG E I CONFRONTI Le informazioni sullo stato attuale del programma (errori verificatisi, risultato dell ultimo confronto, ) sono memorizzati in un registro del processore per cui ogni bit ha un significato particolare. I bit che ci interessano sono 9 e si chiamano rispettivamente O D I T S Z A P C. Ogni lettera è l iniziale della funzione che descrivono: c carry flag bit che ci dice se c è riporto p parity flag bit di parità a auxiliary carry flag z zero flag l ultima operazione ha dato zero s sign flag bit del segno (positivo o negativo) o overflow flag si è verificato un overflow i interrupt enable abilitazione generale degli interrupt d direction flag t trap flag L operatore CMP esegue un confronto tra due operandi (non entrambi in memoria) e setta il registro flag nel seguente modo: CMP A,B A > B (maggiore) CF = 0 (carry flag) ZF = 0 (zero flag) A < B (minore) CF = 1 ZF = 0 A = B (uguale) ZF = 1 è come se CMP eseguisse una sottrazione, infatti lo zero flag (risultato dell ultima operazione nullo) è impostato a 1 se i due operandi sono uguali. Un confronto è seguito sicuramente da qualcosa che prenda decisioni riguardo il flusso del programma e questa operazione è eseguita dall operatore di salto condizionato. Sono definiti tanti salti condizionati i cui operatori cominciano tutti per J e si differenziano secondo i flag su cui operano. A questo proposito copio e incollo una bella tabella in inglese che li elenca e li descrive tutti ricordando che si usano in questo modo:

7 Jxx indirizzo Opcode Mnemonic Meaning Jump Condition 77 JA Jump if Above CF=0 and ZF=0 73 JAE Jump if Above or Equal CF=0 72 JB Jump if Below CF=1 76 JBE Jump if Below or Equal CF=1 or ZF=1 72 JC Jump if Carry CF=1 E3 JCXZ Jump if CX Zero CX=0 74 JE Jump if Equal ZF=1 7F JG Jump if Greater (signed) ZF=0 and SF=OF 7D JGE Jump if Greater or Equal (signed) SF=OF 7C JL Jump if Less (signed) SF!= OF 7E JLE Jump if Less or Equal (signed) ZF=1 or SF!=OF JMP Unconditional Jump unconditional 76 JNA Jump if Not Above CF=1 or ZF=1 72 JNAE Jump if Not Above or Equal CF=1 73 JNB Jump if Not Below CF=0 77 JNBE Jump if Not Below or Equal CF=0 and ZF=0 73 JNC Jump if Not Carry CF=0 75 JNE Jump if Not Equal ZF=0 7E JNG Jump if Not Greater (signed) ZF=1 or SF!=OF 7C JNGE Jump if Not Greater or Equal (signed) SF!= OF 7D JNL Jump if Not Less (signed) SF=OF 7F JNLE Jump if Not Less or Equal (signed) ZF=0 and SF=OF 71 JNO Jump if Not Overflow (signed) OF=0 7B JNP Jump if No Parity PF=0 79 JNS Jump if Not Signed (signed) SF=0 75 JNZ Jump if Not Zero ZF=0 70 JO Jump if Overflow (signed) OF=1 7A JP Jump if Parity PF=1 7A JPE Jump if Parity Even PF=1 7B JPO Jump if Parity Odd PF=0 78 JS Jump if Signed (signed) SF=1 74 JZ Jump if Zero ZF=1 ESEMPIO Supponiamo l operazione AX = (16 bit) BX = CMP AX,BX setta lo zero flag, ovvero ZF = 1, quindi quando andiamo a fare JNE indirizzo il flusso del programma continuerà, ignorando il salto, perché il salto avviene solo e soltanto se lo zero flag è 0, perché AX BX = 0 significa AX = BX. CHIAMATA A PROCEDURA Nel capitolo precedente abbiamo dato una descrizione dettagliata di come avviene una chiamata a funzione ora vediamo che la chiamata viene eseguita effettivamente con l operatore CALL indirizzo

8 che salva il program counter sullo stack e poi esegue un salto incondizionato all indirizzo. Dunque una CALL equivale a... PUSH PC JMP indirizzo... All indirizzo ci saranno una serie di operazioni e poi quando la funzione (o procedura che sia) è terminata c è l istruzione RET, che carica dallo stack il valore precedente del PC ed esegue un salto all indirizzo dove era stata sospesa l esecuzione. Avremo dunque che l istruzione di ritorno equivale a... POP BX JMP BX... OPERATORE NOP Si usa semplicemente scrivendo NOP, che ha come opcode 90h. Questa istruzione non fa nulla! Il suo scopo è quello di consumare tempo (3 cicli del processore) o di riservare spazio in memoria (per eventuali aggiunte future di istruzioni). (Vedi Appendice A) INSERIMENTO DI VALORI Un qualsiasi valore può essere inserito come un valore binario, come un valore ottale, come un valore decimale o esadecimale. Per esempio per inserire un valore decimale in AX possiamo utilizzare la seguente sintassi MOV AX,120 ovvero di default un numero verrà riconosciuto come decimale. Se voglio inserire un numero esadecimale devo aggiungere h MOV AX,A5h per un numero binario invece devo aggiungere b. CHIAMATA DI UN INTERRUPT Per chiamare un interruzione sia relative al sistema operativo che al bios, posso utilizzare int numero_interruzione Gli interrupt sono tanti, per esempio il 21h del DOS serve per l input/output, se non mi sbaglio, e non li elenco qui e sebbene siano molto importanti non li tratterò in questa introduzione, ma se potete imparateli da qualche bel manualone buon divertimento.

9 APPENDICE A BASI DI CRACKING: NOP CRACKING Bene ora vediamo come possiamo utilizzare le nostre poche conoscenze in assembly e craccare semplicemente un programma utilizzando una semplice tecnica che consiste nell inserire a posto di un confronto dei NOP. Ci serviremo del programma Olly Debugger 1.10, che può essere scaricato gratuitamente da PROGRAMMA IN C++ Scriviamo il seguente programma in C++, spero che il codice sia semplice. #include <iostream> #include <string> #include <stdlib.h> using namespace std; int main() { string s = "password"; string p = "peppe"; string g = "pippolino"; string h = "sophie"; string f; cout << "password: "; cin >> f; if (f == h) cout << "\nok\n"; else cout << "\nno\n"; } system("pause"); return 0; Compiliamolo e carichiamolo con il nostro caro debugger. Vogliamo fare in modo che, applicando una semplice patch al codice, fatta da due NOP, il programma accetti qualsiasi password e non solo la password sophie. Ora procediamo per immagini e soprattutto per intuito. Una volta caricato il programma ci appare un sacco di codice assembly e noi sicuramente non capiamo cosa fa, o meglio possiamo immaginarlo. Ma procediamo intuitivamente, facendo finta di non conoscere il codice sorgente e di non poter leggere la password in chiaro direttamente dal testo del programma. Quando non inseriamo la password corretta il programma ci risponde con un no e dunque cerchiamo questa stringa e ad un certo punto del programma troveremo:

10 Abbiamo dunque trovato il no. Intuitivamente sopra ok è il messaggio che otteniamo se immettiamo la password corretta. Per cui risaliamo il no fino a trovare il salto incondizionato (JMP) che, appunto, salta questo messaggio di errore. L indirizzo successivo a questo JMP sarà quello che ci interessa. Infatti dobbiamo trovare il salto, questa volta condizionato, che porta all indirizzo prima citato (nel nostro caso B) ed è quello evidenziato in figura (Jump if Equal) che è preceduto da un TEST. Dobbiamo ora mettere NOP (precisamente 2 NOP) al posto di questo JE. Selezioniamo la riga e premiamo il tasto di spazio (la stessa cosa di cliccare col tasto destro e premere Assemble ). A questo punto basta sostituire il comando con un NOP e lasciare l opzione fill with NOP s (lett. riempi con dei NOP). Possiamo a questo punto premere il tasto Assemble e otterremo una cosa del genere Quindi non ci sarà il salto e avremo sempre OK. Facciamo eseguire il programma al debugger, premendo play dalla barra degli strumenti e otteniamo il risultato desiderato PROGRAMMA IN VISUAL BASIC

11 Costruiamo un form come in figura, utilizzando una casella di testo che chiameremo Text1 e un Pulsante che chiameremo Command1. Aggiungiamo ora al pulsante Command1 il seguente codice: Private Sub Command1_Click() If Text1 = "micio" Then MsgBox "ok" Else MsgBox "no" End If End Sub Proviamo ora a procedere in un modo meno intuitivo. Visual Basic (chiamiamolo VB) fa uso di librerie esterne per eseguire il programma e il confronto viene fatto da una funzione esterna presa da queste librerie, i cui riferimenti compaiono all inizio del codice ed è vbastrcmp che sta per String Compare ovvero testa l eguaglianza tra due stringhe. Ora dobbiamo trovare quando questa funzione viene richiamata. Per fare questo dobbiamo scegliere dal menù View la voce References (lett. Riferimenti): ci compariranno i punti in cui viene richiamata tale funzione. Andiamo ad esaminare il codice per ogni chiamata (facendoci doppio click) e ci accorgiamo che quella che ci serve è proprio la terza, proprio per la presenza da quelle parti del messaggio di ok che il programma ci darebbe in caso di password corretta. Ora possiamo agire con lo stesso ragionamento di prima, stavolta scendendo fino al primo JMP e poi trovando il salto condizionato che si riferisce all indirizzo ad esso successivo (oppure troviamo come prima il messaggio di errore no e risaliamo fino al primo JMP, etc ). Patchiamo il codice con i nostri bei NOP dove c è il salto e quando andiamo ad inserire una qualsiasi password avremo il risultato desiderato, il che ci permette di poter accedere anche non inserendo la parola micio. Nel caso volessimo rendere questa modifica permanente o andiamo con un editor esadecimale (hex editor) a scrivere all indirizzo trovato (00401C4E) (90 stà per NOP) al posto di (JE...) oppure creiamo un programma (ovvero un crack) che lo fa al posto nostro, in modo da renderlo disponibile alla comunità. Seguono le immagini relative alle varie fasi:

12 1) trovato il salto da andare a modificare 2) patch con i NOP 3) programma che funziona come vogliamo CONCLUSIONE Non c è bisogno di dirvi che questa è una tecnica base, inapplicabile nella pratica dove un programma è superprotetto dalla decompilazione e le password sono codificate o ci sono livelli altissimi di protezione. Per saperne di più, sapete cosa dovete fare: studiare, decompilare e debuggare buono studio.

13 APPENDICE B BUFFER OVERFLOW: UN INTRODUZIONE Guardiamo questo piccolo pezzettino di codice. int main(int argv,char **argc) { char buf[256]; } strcpy(buf,argc[1]); Per prima cosa spieghiamo cosa succede int main(int argv,char **argc) la funzione main può o può non avere due variabili di ingresso e sono parametri passatigli direttamente dal sistema operativo. Quando vogliamo per esempio aprire un file col notepad o con qualsiasi altro programma da dos gli diamo come parametro in ingresso il nome del file notepad nome_file.txt oppure possiamo passare dei parametri a dir per ottenere una visualizzazione differente dir /ad /p /w in questo caso gli abbiamo passato tre argomenti. Questi tre argomenti andranno a finire nel vettore char **argc, che sarà fatto in questo modo argc[0]=dir ovvero contiene il nome del programma argc[1]=/ad contiene il primo parametro argc[2]=/p argc[3]=/w quindi abbiamo un array di quattro stringhe e la grandezza di questo array ci è dato proprio dal primo argomento int argc. char buf[256]; strcpy(buf,argc[1]); queste due righe invece copiano in un array di 256 caratteri il primo argomento (dopo il nome del programma) passato al programma, senza fare nient altro. Non c è nessun controllo sulla lunghezza della sorgente e allora la funzione di copia si fermerà solo quando troverà il carattere di terminazione della stringa \0, perciò possiamo immettere ben oltre 256 caratteri e sfruttare questa cosa a nostro piacimento. Vogliamo trovare il modo di richiamare una funzione, scritta, ma non utilizzata esplicitamente dal programma. Principalmente abbiamo una situazione come la precedente: c è un array di dimensione N e noi gli diamo in input M caratteri (con M > N) in modo tale da andare a sovrascrivere la return address (lett. indirizzo di ritorno RET di una precedente CALL) salvata nello stack, tramite l array. Brevemente ricordiamo che quando avviene una chiamata a funzione nello stack è fatto il push dei parametri, poi quando eseguiamo la CALL viene salvato nello stack il return address della funzione e poi dopo di esso ci saranno le variabili locali. Per esempio abbiamo uno stack fatto in questo modo (dove [LOC N] è eventualmente la testa):...[arg 1]... [ARG N] [RET] [LOC 1]... [LOC N]... Vediamo il codice del programma in questione:

14 #include <iostream> #include <stdlib.h> using namespace std; void chiamami() { cout << "\nla funzione e stata chiamata\n"; exit(0); } int ciao() { char c[14]; cout << "\ninserisci: "; cin >> c; /* se qui ci fosse cin.getline(c,13); non potremmo fare niente c'è infatti un errore di programmazione, non facilmente individuabile a consentire il buffer overflow */ return 0; } int main() { ciao(); cout << "\nla funzione non e stata richiamata\n"; return 0; } Andiamo ora immediatamente a stuzzicare con un input molto lungo il nostro programma e come vediamo dalla figura il programma ci dà errore. Capiamo naturalmente che l errore è nella return address, poiché è appunto quello che volevamo fare e inoltre notiamo che c è qualcosa di interessante. Se vediamo infatti i dettagli dell errore scopriamo che l offset è 6d6c6968 che praticamente sono a due a due la traduzione in esadecimale di m l i h. Dunque abbiamo trovato come inserire il nostro indirizzo di ritorno. Proviamo infatti ad inserire una stringa più corta.

15 Oltre all errore, causato dal nostro input, si vede che il programma ritorna correttamente all esecuzione del main e dunque mostra il messaggio la funzione non e stata richiamata che ci aspettavamo. Qualcuno si potrebbe chiedere perché non ho messo g. Il programma ci avrebbe dato ugualmente errore perché avremmo sovrascritto con 00, ovvero il terminatore di stringa, l indirizzo di ritorno. Dobbiamo ora trovare l indirizzo di ritorno che ci interessa, ovvero quello della funzione non chiamata, e fare in modo che il flusso del programma sia reindirizzato in quella direzione. Per fare questo ci avvaliamo del nostro fidato debugger (io uso Olly Debugger 1.10). Come vediamo dalla figura il debugger non ha voluto vedere il codice come un insieme di istruzioni assembly, forse proprio perché non è utilizzata dal programma. Allora cosa facciamo per vedere il codice? Selezioniamo il codice in grigio che intuiamo essere la funzione (e lo intuiamo perché c è la stringa la funzione e stata chiamata ), clicchiamo con il tasto destro e dal menù a tendina scegliamo analysis, poi scegliamo during next analysis, treat section as e infine scegliamo command. Il codice verrà così tradotto in qualcosa di più leggibile.

16 Abbiamo dunque trovato il nostro return address, che deve essere 4012A0. Andiamo a vedere cosa succede se digitiamo = ALT + 64 ^R = ALT + 18 á = ALT e sono rispettivamente i numeri 40, 12, A0 convertiti dall esadecimale al decimale. Non abbiamo il risultato sperato, perché non abbiamo considerato il modo di memorizzare i dati nello stack. Come vediamo infatti dall offset che ci dà nell immagine è proprio l inverso di quello che ci interessa. Lo stack, infatti, memorizza tutto come pezzi da 2 byte (16 bit) invertendo l ordine dell intera word. Quindi se abbiamo A0, dobbiamo per prima cosa disporre i byte in ordine inverso, ottenendo A e dunque convertendo in decimale 160, 18, 64 (dopo c è \0 ).

17 APPENDICE C COPIA E INCOLLA DI UN SEMPLICE HELLO WORD! Ecco di seguito un esempio di utilizzo di un interrupt che costituisce anche un esempio di programma pienamente compatibile col Turbo Assembler (l'assemblatore della Borland): ; ; Interrupt 21h ; Sottofunzione per Visualizzare una Stringa ; AH=9 ; DS:DX -> stringa ASCII (DS:DX deve puntare alla stringa che vuoi ; stampare) la stringa deve essere terminata con '$' ; ; ; Interrupt 21h ; Sottofunzione per Terminare il Programma ; AH=4Ch ; AL=code d'errore ; Segment Data ; Il segmento DATI (DATA) HelloWorld db 'Hello World!$' ; INT 21h / AH=9 usa '$' per ; indicare la fine della stringa EndS ; Fine (End) del Segmento Dati (Data Segment) Segment Code ; Il Segmento di Codice (Code Segment).. il codice ; eseguibile va messo qui dentro Assume CS:Code,DS:Data ; Senza questa direttiva, alcuni ; assemblatori non sono in grado di ; associare ciascuno dei segmenti definiti ; con il suo opportuno registro di segmento. Start: MOV AX,data MOV DS,AX ; Definisce il punto a cui il DOS farà puntare inizialmente ; CS:IP ; Notiamo che quando il DOS carica un file EXE, non imposta ; il registro DS all'inizio del segmento dati; perciò ; dobbiamo farlo noi ; Ottiene il numero di segmento del nostro segmento DATI ; (DATA segment) ; Imposta DS al segmento in cui si trovano i DATI (DATA) MOV AH,9 MOV DX,offset HelloWorld INT 21h ; DOS Visualizza una Stringa (DOS Print String) ; DS:DX deve contenere l'indirizzo della stringa ; (DS il segmento e DX l'offset) ; Chiama (Call) INT 21h per stampare la stringa MOV AX,4C00h INT 21h EndS End Start ; Uscita al DOS (DOS Exit Program) ; Termina il programma - dopo questa istruzione non c'è ; più nulla da fare ; Fine del Segmento Codice (End the Code Segment) ; Questa è una direttiva per TASM (il Turbo Assembler) e ; gli indica la fine del codice da assemblare (cioè da ; tradurre in linguaggio macchina). Ecco perché EndS non ; può comparire dopo End Start, ma deve venire prima ; (altrimenti sarebbe ignorata e l'assemblatore ci ; avvertirebbe che abbiamo lasciato un segmento aperto) Wow! Adesso siamo in grado di scrivere un programma che visualizza "Hello World!" sullo schermo (Ntd: questo significa "Ciao mondo!" o se preferite "Salve, gente!"). Roba da far paura, eh? FONTE:

Architettura degli elaboratori (A)

Architettura degli elaboratori (A) Laurea in Informatica a.a. 2010-2011 Laboratorio del corso di Architettura degli elaboratori (A) Modulo 1: l Architettura dell 8086 Valeria Carofiglio Linguaggi a vari livelli e loro relazioni Programma

Dettagli

I.T.I. A. RIGHI e VIII Napoli Specializzazione Informatica Tradizionale Corso D Materia: Sistemi. Elementi di Assembly 8086

I.T.I. A. RIGHI e VIII Napoli Specializzazione Informatica Tradizionale Corso D Materia: Sistemi. Elementi di Assembly 8086 I.T.I. A. RIGHI e VIII Napoli Specializzazione Informatica Tradizionale Corso D Materia: Sistemi Elementi di Assembly 8086 1 Assembly 8086 I registri Per poter elaborare le informazioni ricevute dall esterno,

Dettagli

Ing. Paolo Domenici PREFAZIONE

Ing. Paolo Domenici PREFAZIONE Ing. Paolo Domenici SISTEMI A MICROPROCESSORE PREFAZIONE Il corso ha lo scopo di fornire i concetti fondamentali dei sistemi a microprocessore in modo semplice e interattivo. È costituito da una parte

Dettagli

L Assembler 8086. Istruzioni Aritmetiche. M. Rebaudengo - M. Sonza Reorda. Politecnico di Torino Dip. di Automatica e Informatica

L Assembler 8086. Istruzioni Aritmetiche. M. Rebaudengo - M. Sonza Reorda. Politecnico di Torino Dip. di Automatica e Informatica L Assembler 8086 M. Rebaudengo - M. Sonza Reorda Politecnico di Torino Dip. di Automatica e Informatica 1 M. Rebaudengo, M. Sonza Reorda Si suddividono in: istruzioni per il calcolo binario istruzioni

Dettagli

Struttura logica di un programma

Struttura logica di un programma Struttura logica di un programma Tutti i programmi per computer prevedono tre operazioni principali: l input di dati (cioè l inserimento delle informazioni da elaborare) il calcolo dei risultati cercati

Dettagli

Istruzioni di modifica della sequenza di elaborazione

Istruzioni di modifica della sequenza di elaborazione Istruzioni di modifica della sequenza di elaborazione Permettono di modificare la sequenza di esecuzione delle istruzioni di un programma, normalmente controllata dal meccanismo automatico di avanzamento

Dettagli

Cenni ad Assembly Intel

Cenni ad Assembly Intel Cenni ad Assembly Intel Luca Abeni April 17, 2015 Architerrura Intel Utilizzata sulla maggior parte dei laptop, desktop e server moderni Lunga storia Dagli anni 70 (Intel 8080-8 bit!)......fino ad oggi

Dettagli

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0 Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice

Dettagli

Lezione 16: L architettura LC-3

Lezione 16: L architettura LC-3 Lezione 16: L architettura LC-3 Laboratorio di Elementi di Architettura e Sistemi Operativi 15 Maggio 2013 Ricorda... Il ciclo di esecuzione di un istruzione è composto da sei fasi: FETCH DECODE ADDRESS

Dettagli

Classe 3a INF - Esecuzione di un interrupt: ricostruzione delle operazioni al calcolatore con Turbo Debugger

Classe 3a INF - Esecuzione di un interrupt: ricostruzione delle operazioni al calcolatore con Turbo Debugger Classe 3a INF - Esecuzione di un interrupt: ricostruzione delle operazioni al calcolatore con Turbo Debugger Turbo debugger è un potente strumento di sviluppo pensato, anni fa, come complemento agli strumenti

Dettagli

qui possiamo scegliere se creare un nuovo Database oppure aprire un Database già esistente. Fatto ciò avremo questa seconda schermata:

qui possiamo scegliere se creare un nuovo Database oppure aprire un Database già esistente. Fatto ciò avremo questa seconda schermata: Creare un Database completo per la gestione del magazzino. Vedremo di seguito una guida pratica su come creare un Database per la gestione del magazzino e la rispettiva spiegazione analitica: Innanzitutto

Dettagli

Processore PC. Spazio di indirizzamento. la ALU (Arithmetic and Logic Unit) la FPU (Floating Point Unit)

Processore PC. Spazio di indirizzamento. la ALU (Arithmetic and Logic Unit) la FPU (Floating Point Unit) Processore PC Faremo riferimento al cosiddetto processore PC, che rappresenta una schematizzazione dei processori a 32 bit presenti nei Personal Computer. Il processore è costituito da due unità fondamentali:

Dettagli

Il linguaggio assembly 8086

Il linguaggio assembly 8086 Il linguaggio assembly 8086 Introduzione Il linguaggio macchina Il linguaggio naturale di un microprocessore è il linguaggio macchina. Nel linguaggio macchina non esistono riferimenti astratti o simbolici

Dettagli

Architettura degli Elaboratori

Architettura degli Elaboratori Architettura degli Elaboratori Corso di Laurea Triennale in Informatica Università degli Studi di Bari Anno Accademico 2009-2010 Laboratorio lez1: il processore 8086/88 Prof. S.Pizzutilo I processori Intel

Dettagli

Codici Numerici. Modifica dell'informazione. Rappresentazione dei numeri.

Codici Numerici. Modifica dell'informazione. Rappresentazione dei numeri. Codici Numerici. Modifica dell'informazione. Rappresentazione dei numeri. A partire da questa lezione, ci occuperemo di come si riescono a codificare con sequenze binarie, quindi con sequenze di 0 e 1,

Dettagli

SET/CLEAR LOAD DATA FROM STRING

SET/CLEAR LOAD DATA FROM STRING SET/CLEAR STD CLD AZIONE: Imposta ad 1 (STD) o a zero (CLD) il valore del flag DF. Sono istruzioni senza parametri. Vanno sempre messi!! FLAG di cui viene modificato il contenuto: Nessuno (a parte DF).

Dettagli

3. Gestione di un sistema operativo a interfaccia grafica (elementi di base) 3.1 Software

3. Gestione di un sistema operativo a interfaccia grafica (elementi di base) 3.1 Software Pagina 29 di 47 3. Gestione di un sistema operativo a interfaccia grafica (elementi di base) 3.1 Software Come abbiamo già detto in precedenza, l informatica si divide in due grandi mondi : l hardware

Dettagli

Software Applicativo. Hardware. Sistema Operativo Software di Base Traduttori e Linguaggi

Software Applicativo. Hardware. Sistema Operativo Software di Base Traduttori e Linguaggi : di base e applicativo L HardWare (monitor, tastiera, circuiti, stampante, ) è il nucleo fondamentale del calcolatore ma da solo non serve a nulla. Bisogna utilizzare il software per poterlo fare funzionare.

Dettagli

Architettura di un Elaboratore

Architettura di un Elaboratore Architettura di un Elaboratore Fabio Massimo Zanzotto Ricapitoliamo puntate precedenti Cosa abbiamo a disposizione: Concetto di algoritmo (con eventuale parametrizzazione) Rappresentazione dell informazione

Dettagli

Calcolatori Elettronici Parte X: l'assemblatore as88

Calcolatori Elettronici Parte X: l'assemblatore as88 Anno Accademico 2013/2014 Calcolatori Elettronici Parte X: l'assemblatore as88 Prof. Riccardo Torlone Università Roma Tre L'assemblatore as88 Disponibile presso: CD-ROM allegato al libro di testo del corso

Dettagli

Assembly. Modello x86

Assembly. Modello x86 Assembly Modello x86 1 Il microprocessore Un MICROPROCESSORE è un circuito integrato dotato di una struttura circuitale in grado di attuare un prefissato SET di ISTRUZIONI 2 Caratteristiche del microprocessore

Dettagli

STACK, istruzioni PUSH e POP; PROCEDURE, istruzioni CALL e RET

STACK, istruzioni PUSH e POP; PROCEDURE, istruzioni CALL e RET Lo stack STACK, istruzioni PUSH e POP; PROCEDURE, istruzioni CALL e RET Lo stack (tradotto talvolta in italiano con pila o catasta) è un'area di memoria privilegiata, dove il microprocessore può salvare

Dettagli

www.filoweb.it STAMPA UNIONE DI WORD

www.filoweb.it STAMPA UNIONE DI WORD STAMPA UNIONE DI WORD Molte volte abbiamo bisogno di stampare più volte lo stesso documento cambiando solo alcuni dati. Potremmo farlo manualmente e perdere un sacco di tempo, oppure possiamo ricorrere

Dettagli

Parte II.2 Elaboratore

Parte II.2 Elaboratore Parte II.2 Elaboratore Elisabetta Ronchieri Università di Ferrara Dipartimento di Economia e Management Insegnamento di Informatica Dicembre 1, 2015 Elisabetta Elisabetta Ronchieri II Software Argomenti

Dettagli

AXO Achitettura dei Calcolatori e Sistema Operativo. Instruction Set Architecture (ISA) e 68000

AXO Achitettura dei Calcolatori e Sistema Operativo. Instruction Set Architecture (ISA) e 68000 AXO Achitettura dei Calcolatori e Sistema Operativo Instruction Set Architecture (ISA) e 68000 introduzione a ISA ISA - Instruction Set Architecture insieme delle istruzioni (instruction set) che possono

Dettagli

Foglio di calcolo. Il foglio di calcolo: Excel. Selezione delle celle

Foglio di calcolo. Il foglio di calcolo: Excel. Selezione delle celle Foglio di calcolo Il foglio di calcolo: Excel I dati inseriti in Excel sono organizzati in Cartelle di lavoro a loro volta suddivise in Fogli elettronici. I fogli sono formati da celle disposte per righe

Dettagli

I SISTEMI DI NUMERAZIONE

I SISTEMI DI NUMERAZIONE ISTITUTO DI ISTRUZIONE SUPERIORE G. M. ANGIOY CARBONIA I SISTEMI DI NUMERAZIONE Prof. G. Ciaschetti Fin dall antichità, l uomo ha avuto il bisogno di rappresentare le quantità in modo simbolico. Sono nati

Dettagli

Dev C++ Prerequisiti. Note di utilizzo. Utilizzo di Windows Effettuare il download da Internet Compilazione di un programma

Dev C++ Prerequisiti. Note di utilizzo. Utilizzo di Windows Effettuare il download da Internet Compilazione di un programma Dev C++ Note di utilizzo 1 Prerequisiti Utilizzo di Windows Effettuare il download da Internet Compilazione di un programma 2 1 Introduzione Lo scopo di queste note è quello di diffondere la conoscenza

Dettagli

Programmazione dello Z80

Programmazione dello Z80 Il microprocessore si incarica di: gestire il programma e i suoi dati di eseguire i calcoli richiesti. Le azioni appena elencate rendono necessario che il microprocessore abbia da qualche parte, al suo

Dettagli

Introduzione a Visual Basic Lezione 1 Concetti base e istruzioni condizionali

Introduzione a Visual Basic Lezione 1 Concetti base e istruzioni condizionali a Visual Basic Lezione 1 Concetti base e istruzioni condizionali Mario Alviano Introduzione all informatica Università della Calabria http://alviano.net/introinfo A.A. 2008/09 Introduzione Un esempio:

Dettagli

IMSV 0.8. (In Media Stat Virtus) Manuale Utente

IMSV 0.8. (In Media Stat Virtus) Manuale Utente Introduzione IMSV 0.8 (In Media Stat Virtus) Manuale Utente IMSV è una applicazione che calcola che voti può'prendere uno studente negli esami che gli mancano per ottenere la media che desidera. Importante:

Dettagli

11010010 = 1*2^7 + 1*2^6 + 0*2^5 + 1*2^4 + 0*2^3 + 0*2^2 + 1*2^1 + 0*2^0 = 210

11010010 = 1*2^7 + 1*2^6 + 0*2^5 + 1*2^4 + 0*2^3 + 0*2^2 + 1*2^1 + 0*2^0 = 210 Il sistema BINARIO e quello ESADECIMALE. Il sistema di numerazione binario è particolarmente legato ai calcolatori in quanto essi possono riconoscere solo segnali aventi due valori: uno alto e uno basso;

Dettagli

Appunti di: MICROSOFT EXCEL

Appunti di: MICROSOFT EXCEL Appunti di: MICROSOFT EXCEL INDICE PARTE I: IL FOGLIO ELETTRONICO E I SUOI DATI Paragrafo 1.1: Introduzione. 3 Paragrafo 1.2: Inserimento dei Dati....4 Paragrafo 1.3: Ordinamenti e Filtri... 6 PARTE II:

Dettagli

Von Neumann. John Von Neumann (1903-1957)

Von Neumann. John Von Neumann (1903-1957) Linguaggio macchina Von Neumann John Von Neumann (1903-1957) Inventore dell EDVAC (Electronic Discrete Variables AutomaFc Computer), la prima macchina digitale programmabile tramite un soiware basata su

Dettagli

Quinto Homework. Indicare il tempo necessario all'esecuzione del programma in caso di avvio e ritiro fuori ordine.

Quinto Homework. Indicare il tempo necessario all'esecuzione del programma in caso di avvio e ritiro fuori ordine. Quinto Homework 1) Si vuole progettare una cache a mappatura diretta per un sistema a 32 bit per una memoria da 2 GB (quindi sono solo 31 i bit utili per gli indirizzi) e blocchi di 64 byte. Rispondere

Dettagli

Sommario Introduzione al linguaggio Assembly. Calcolatori Elettronici Prof. Gian Luca Marcialis. Le operazioni fondamentali

Sommario Introduzione al linguaggio Assembly. Calcolatori Elettronici Prof. Gian Luca Marcialis. Le operazioni fondamentali Prof. Gian Luca Marcialis Corso di Laurea di Ingegneria Elettronica Capitolo 5 Linguaggio Assembly Fonti principali: Patterson, A.D., Hennessy, J., "Struttura, organizzazione e progetto dei calcolatori

Dettagli

JAVASCRIPT. Tale file è associato alla pagina web mediante il tag <script> inserito nella sezione <head> con la seguente sintassi:

JAVASCRIPT. Tale file è associato alla pagina web mediante il tag <script> inserito nella sezione <head> con la seguente sintassi: JAVASCRIPT Introduzione Con l HTML siamo in grado di realizzare pagine web statiche. Con il linguaggio Javascript, invece, possiamo interagire modificando il contenuto della pagina. Il linguaggio javascript

Dettagli

Lezione n.9. Introduzione al linguaggio macchina

Lezione n.9. Introduzione al linguaggio macchina Lezione n.9 Autore:Luca Orrù 1 Sommario Esecuzione delle istruzioni Architettura interna ed esterna Linguaggio assembler e modi d indirizzamento Consideriamo ora la singola istruzione e la scomponiamo

Dettagli

4. Operazioni aritmetiche con i numeri binari

4. Operazioni aritmetiche con i numeri binari I Numeri Binari 4. Operazioni aritmetiche con i numeri binari Contare con i numeri binari Prima di vedere quali operazioni possiamo effettuare con i numeri binari, iniziamo ad imparare a contare in binario:

Dettagli

Classe 3 A Inf - Alcune informazioni sull'uso del programma Debug

Classe 3 A Inf - Alcune informazioni sull'uso del programma Debug Classe 3 A Inf - Alcune informazioni sull'uso del programma Debug Un po' di storia Debug è un programma che da lunghissimo tempo è presente nei sistemi Microsoft. Fin dall'epoca dei primi dischetti DOS,

Dettagli

Lezione 1: L architettura LC-3 Laboratorio di Elementi di Architettura e Sistemi Operativi 10 Marzo 2014

Lezione 1: L architettura LC-3 Laboratorio di Elementi di Architettura e Sistemi Operativi 10 Marzo 2014 Lezione 1: L architettura LC-3 Laboratorio di Elementi di Architettura e Sistemi Operativi 10 Marzo 2014 Ricorda... Il ciclo di esecuzione di un istruzione è composto da sei fasi: FETCH DECODE ADDRESS

Dettagli

CLASSE III A I.T.I. (ABACUS) SISTEMI DI ELABORAZIONE E TRASMISSIONE DEI DATI VERIFICA DI RECUPERO

CLASSE III A I.T.I. (ABACUS) SISTEMI DI ELABORAZIONE E TRASMISSIONE DEI DATI VERIFICA DI RECUPERO CLASSE III A I.T.I. (ABACUS) SISTEMI DI ELABORAZIONE E TRASMISSIONE DEI DATI VERIFICA DI RECUPERO 1 Domanda [1 punto] Dato il formato in virgola mobile su 32 bit così definito (precisione singola): o 1

Dettagli

Esempio di moltiplicazione come somma e spostamento

Esempio di moltiplicazione come somma e spostamento Esempio di moltiplicazione come somma e spostamento Implementare una moltiplicazione coinvolge algoritmi di shift e somma Istruzioni di Shift:movimento di bit: ROL Rd ROR Rd LSL Rd LSR ASR Rd Rd 22 x 35

Dettagli

Aritmetica dei Calcolatori 2

Aritmetica dei Calcolatori 2 Laboratorio di Architettura 13 aprile 2012 1 Operazioni bit a bit 2 Rappresentazione binaria con segno 3 Esercitazione Operazioni logiche bit a bit AND OR XOR NOT IN OUT A B A AND B 0 0 0 0 1 0 1 0 0 1

Dettagli

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C Università degli Studi di Cagliari Corso di Laurea in Ingegneria Biomedica (Industriale), Chimica, Elettrica, e Meccanica FONDAMENTI DI INFORMATICA 1 http://www.diee.unica.it/~marcialis/fi1 A.A. 2010/2011

Dettagli

Codifica: dal diagramma a blocchi al linguaggio C++

Codifica: dal diagramma a blocchi al linguaggio C++ Codifica: dal diagramma a blocchi al linguaggio C++ E necessario chiarire inizialmente alcuni concetti. La compilazione Il dispositivo del computer addetto all esecuzione dei programmi è la CPU La CPU

Dettagli

90.1 Sistemi di numerazione. 90.1.1 Sistema decimale. 605 Capitolo 90 Dai sistemi di numerazione all organizzazione della memoria

90.1 Sistemi di numerazione. 90.1.1 Sistema decimale. 605 Capitolo 90 Dai sistemi di numerazione all organizzazione della memoria 605 Capitolo 90 Dai sistemi di numerazione all organizzazione della memoria 90.1 Sistemi di numerazione.................................................... 605 90.1.1 Sistema decimale..................................................

Dettagli

MODULO 3. Microsoft Excel. TEST ED ESERCIZI SU: http://www.informarsi.net/ecdl/excel/index.php

MODULO 3. Microsoft Excel. TEST ED ESERCIZI SU: http://www.informarsi.net/ecdl/excel/index.php MODULO 3 Microsoft Excel TEST ED ESERCIZI SU: http:///ecdl/excel/index.php Foglio Elettronico - SpreadSheet Un foglio elettronico (in inglese spreadsheet) è un programma applicativo usato per memorizzare

Dettagli

FUNZIONI AVANZATE DI EXCEL

FUNZIONI AVANZATE DI EXCEL FUNZIONI AVANZATE DI EXCEL Inserire una funzione dalla barra dei menu Clicca sulla scheda "Formule" e clicca su "Fx" (Inserisci Funzione). Dalla finestra di dialogo "Inserisci Funzione" clicca sulla categoria

Dettagli

Tutta la famiglia dei processori Intel (x86) si basa ed e' compatibile con il primo processore di questo tipo: l'8086.

Tutta la famiglia dei processori Intel (x86) si basa ed e' compatibile con il primo processore di questo tipo: l'8086. I processori Intel Tutta la famiglia dei processori Intel (x86) si basa ed e' compatibile con il primo processore di questo tipo: l'8086. L'8086 e' un processore a 16 bit quindi i suoi registri potranno

Dettagli

Convertitori numerici in Excel

Convertitori numerici in Excel ISTITUTO DI ISTRUZIONE SUPERIORE G. M. ANGIOY CARBONIA Convertitori numerici in Excel Prof. G. Ciaschetti Come attività di laboratorio, vogliamo realizzare dei convertitori numerici con Microsoft Excel

Dettagli

Ultr@ VNC: Guida (parte 1)

Ultr@ VNC: Guida (parte 1) Ultr@ VNC: Guida (parte 1) Vi presento la guida in italiano per l installazione e l utilizzo di Ultra VNC :http://ultravnc.sourceforge.net. Le potenzialità del programma ve le abbiamo già presentate :http://www.femetal.it/9/ultravncrecensione,

Dettagli

AMBIENTE DI SIMULAZIONE ASIM

AMBIENTE DI SIMULAZIONE ASIM LABORATORIO DI ARCHITETTURA DEI CALCOLATORI lezione n 10 Prof. Rosario Cerbone rosario.cerbone@uniparthenope.it http://digilander.libero.it/rosario.cerbone a.a. 2008-2009 AMBIENTE DI SIMULAZIONE ASIM Digitazione

Dettagli

Il sistema operativo

Il sistema operativo Il sistema operativo Il sistema operativo è il programma fondamentale di ogni PC. Costituisce l interfaccia fra l utente ed i componenti fisici del calcolatore. Il sistema operativo comunica con tutti

Dettagli

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione dell informazione negli elaboratori

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione dell informazione negli elaboratori Informazione e computer Si può rappresentare l informazione attraverso varie forme: Numeri Testi Suoni Immagini 0001010010100101010 Computer Cerchiamo di capire come tutte queste informazioni possano essere

Dettagli

Lezione n.19 Processori RISC e CISC

Lezione n.19 Processori RISC e CISC Lezione n.19 Processori RISC e CISC 1 Processori RISC e Superscalari Motivazioni che hanno portato alla realizzazione di queste architetture Sommario: Confronto tra le architetture CISC e RISC Prestazioni

Dettagli

Fondamenti di Informatica T-1 CdS Ingegneria Informatica a.a. 2011/2012. Introduzione a Visual Studio 2005/2008/2010

Fondamenti di Informatica T-1 CdS Ingegneria Informatica a.a. 2011/2012. Introduzione a Visual Studio 2005/2008/2010 Fondamenti di Informatica T-1 CdS Ingegneria Informatica a.a. 2011/2012 Introduzione a Visual Studio 2005/2008/2010 1 Outline Solution e Project Visual Studio e linguaggio C Visual Studio schermata principale

Dettagli

Innanzitutto andiamo sul sito http://www.dropbox.com/ ed eseguiamo il download del programma cliccando su Download Dropbox.

Innanzitutto andiamo sul sito http://www.dropbox.com/ ed eseguiamo il download del programma cliccando su Download Dropbox. Oggi parlerò di qualcosa che ha a che fare relativamente con la tecnica fotografica, ma che ci può dare una mano nella gestione dei nostri archivi digitali, soprattutto nel rapporto professionale con altre

Dettagli

HORIZON SQL MODULO AGENDA

HORIZON SQL MODULO AGENDA 1-1/11 HORIZON SQL MODULO AGENDA 1 INTRODUZIONE... 1-2 Considerazioni Generali... 1-2 Inserimento Appuntamento... 1-2 Inserimento Manuale... 1-2 Inserimento Manuale con Seleziona... 1-3 Inserimento con

Dettagli

Powered by: Relators:

Powered by: Relators: Powered by: Hacking Group Como www.hgcomo.org Relators: Beretta Matteo, matteo@hgcomo.org Pizzagalli Diego Ulisse ulisse@hgcomo.org Atmel AVR Studio 4 integra al suo interno un ambiente di programmazione

Dettagli

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS CONTENUTI: CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS Creazione database vuoto Creazione tabella Inserimento dati A) Creazione di un database vuoto Avviamo il programma Microsoft Access. Dal menu

Dettagli

Esegue la sommatral'accumulatoreac e Se I=1, ilcontenutodellacelladi memoriailcui indirizzoè

Esegue la sommatral'accumulatoreac e Se I=1, ilcontenutodellacelladi memoriailcui indirizzoè Parte II AND 104 I, micro-operazioni c 0 t 0 : MAR PC c 0 t 1 : MBR M, PC PC+1 c 0 t 2 : OPR MBR(OP), I MBR(I) q 7 Ic 0 t 3 : R 1 Ciclo di fetch (q 7 +I )c 0 t 3 : F 1 c 1 t 0 : MAR MBR(AD); / 104 da Hex

Dettagli

WORD 97 SCRIVERE UNA TESI DI LAUREA

WORD 97 SCRIVERE UNA TESI DI LAUREA WORD 97 SCRIVERE UNA TESI DI LAUREA PASSO 1 Per prima cosa pensiamo al formato generale della pagina: i margini richiesti da una tesi sono quasi sempre più ampi di quelli di un testo normale. Apriamo ora

Dettagli

FATTURE PROFESSIONISTI 1.5 MANUALE UTENTE. ultima revisione: 21/05/07

FATTURE PROFESSIONISTI 1.5 MANUALE UTENTE. ultima revisione: 21/05/07 FATTURE PROFESSIONISTI 1.5 MANUALE UTENTE ultima revisione: 21/05/07 Indice Panoramica... 1 Navigazione... 2 Selezionare una Vista Dati... 2 Individuare una registrazione esistente... 3 Inserire un nuova

Dettagli

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12}; ESERCIZI 2 LABORATORIO Problema 1 Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12}; Chiede all'utente un numero e, tramite ricerca

Dettagli

ARCHITETTURA DEI CALCOLATORI VOLUME I

ARCHITETTURA DEI CALCOLATORI VOLUME I Graziano Frosini ARCHITETTURA DEI CALCOLATORI VOLUME I ASSEMBLER E CORRISPONDENZA FRA C++ E ASSEMBLER CON RIFERIMENTO AL PERSONAL COMPUTER E ALL AMBIENTE DI PROGRAMMAZIONE DJGPP Copyright MMIX ARACNE editrice

Dettagli

ARCHITETTURA DEI MICROPROCESSORI INTEL 8086/8088

ARCHITETTURA DEI MICROPROCESSORI INTEL 8086/8088 ARCHITETTURA DEI MICROPROCESSORI INTEL 8086/8088 microprocessori Intel di terza generazione progetto originario del 1979, ancora oggi interessanti per: 1. motivi didattici: l architettura dei processori

Dettagli

Centro Iniziative Sociali Municipio III

Centro Iniziative Sociali Municipio III Centro Iniziative Sociali Municipio III C.I.S Municipio III Corso di informatca Roberto Borgheresi C ORSO BASE DI I NFORMATICA Centro Iniziative Sociali Municipio III Coordinatore: Roberto Borgheresi Insegnanti:

Dettagli

Introduzione all'uso di

Introduzione all'uso di Introduzione all'uso di Microsoft Outlook Express 6 Outlook Express 6 è un programma, incluso nel browser di Microsoft Internet Explorer, che ci permette di inviare e ricevere messaggi di posta elettronica.

Dettagli

File, Modifica, Visualizza, Strumenti, Messaggio

File, Modifica, Visualizza, Strumenti, Messaggio Guida installare account in Outlook Express Introduzione Questa guida riguarda di sicuro uno dei programmi maggiormente usati oggi: il client di posta elettronica. Tutti, ormai, siamo abituati a ricevere

Dettagli

Matematica in laboratorio

Matematica in laboratorio Unità 1 Attività guidate Attività 1 Foglio elettronico Divisibilità tra numeri naturali Costruisci un foglio di lavoro per determinare se a è divisibile per b, essendo a e b due numeri naturali, con a

Dettagli

Assembler Intel 80x86: Struttura di un programma e Direttive

Assembler Intel 80x86: Struttura di un programma e Direttive Assembler Intel 80x86: Struttura di un programma e Direttive Calcolatori Elettronici B a.a. 2004/2005 Massimiliano Giacomin 1 Istruzioni e direttive Formato generale dei comandi: [nome] codice operazione

Dettagli

Entrematic. Guida all e-commerce

Entrematic. Guida all e-commerce Entrematic Guida all e-commerce Introduzione alla guida Introduzione alla guida Introduzione alla guida Indice Attivazione di un account - Gestione dell account e modifica della password - Creazione e

Dettagli

Introduzione a Visual Studio 2005

Introduzione a Visual Studio 2005 Fondamenti di Informatica e Laboratorio T-AB Ingengeria Elettronica e Telecomunicazioni a.a. 2008/2009 Introduzione a Visual Studio 2005 Outline Solutions e Projects Visual Studio e il linguaggio C Visual

Dettagli

Il foglio elettronico

Il foglio elettronico Il foglio elettronico Foglio di calcolo, Spreadsheet in inglese, Permette di elaborare DATI NUMERICI. E una TABELLA che contiene numeri che possono essere elaborati con FUNZIONI matematiche e statistiche.

Dettagli

UTILIZZARE I SINOTTICI NEL PROGRAMMA DI TELEGESTIONE SWC701

UTILIZZARE I SINOTTICI NEL PROGRAMMA DI TELEGESTIONE SWC701 UTILIZZARE I SINOTTICI NEL PROGRAMMA DI TELEGESTIONE SWC701 GENERALITÁ I sinottici sono disegni che rappresentano graficamente uno o più impianti tecnici. Questi disegni sono completi di tutti gli accessori

Dettagli

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C Università di Roma Tre Dipartimento di Matematica e Fisica Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

Quando lanciamo il programma, ci si presenterà la maschera iniziale dove decideremo cosa vogliamo fare.

Quando lanciamo il programma, ci si presenterà la maschera iniziale dove decideremo cosa vogliamo fare. SOFTWARE CELTX Con questo tutorial cercheremo di capire, e sfruttare, le potenzialità del software CELTX, il software free per la scrittura delle sceneggiature. Intanto diciamo che non è solo un software

Dettagli

Excel. A cura di Luigi Labonia. e-mail: luigi.lab@libero.it

Excel. A cura di Luigi Labonia. e-mail: luigi.lab@libero.it Excel A cura di Luigi Labonia e-mail: luigi.lab@libero.it Introduzione Un foglio elettronico è un applicazione comunemente usata per bilanci, previsioni ed altri compiti tipici del campo amministrativo

Dettagli

Corso introduttivo all utilizzo di TQ Tara

Corso introduttivo all utilizzo di TQ Tara Corso introduttivo all utilizzo di TQ Tara Le pagine che seguono introducono l utente all uso delle principali funzionalità di TQ Tara mediante un corso organizzato in otto lezioni. Ogni lezione spiega

Dettagli

SISTEMI DI NUMERAZIONE E CODICI

SISTEMI DI NUMERAZIONE E CODICI SISTEMI DI NUMERAZIONE E CODICI Il Sistema di Numerazione Decimale Il sistema decimale o sistema di numerazione a base dieci usa dieci cifre, dette cifre decimali, da O a 9. Il sistema decimale è un sistema

Dettagli

Per accedere alla gestione magazzino si clicca, da menù generale, su magazzino->magazzino- >magazzino->anagrafica : si apre la finestra sotto e siamo

Per accedere alla gestione magazzino si clicca, da menù generale, su magazzino->magazzino- >magazzino->anagrafica : si apre la finestra sotto e siamo EASYGEST - GESTIONE ANAGRAFICA MAGAZZINO Per accedere alla gestione magazzino si clicca, da menù generale, su magazzino->magazzino- >magazzino->anagrafica : si apre la finestra sotto e siamo posizionati

Dettagli

Architettura della CPU e linguaggio assembly Corso di Abilità Informatiche Laurea in Fisica. prof. ing. Corrado Santoro

Architettura della CPU e linguaggio assembly Corso di Abilità Informatiche Laurea in Fisica. prof. ing. Corrado Santoro Architettura della CPU e linguaggio assembly Corso di Abilità Informatiche Laurea in Fisica prof. ing. Corrado Santoro Schema a blocchi di una CPU Arithmetic Logic Unit Control Unit Register File BUS Control

Dettagli

Linguaggio macchina. 73.1 Organizzazione della memoria. 73.1.1 Pila per salvare i dati. 73.1 Organizzazione della memoria... 37

Linguaggio macchina. 73.1 Organizzazione della memoria. 73.1.1 Pila per salvare i dati. 73.1 Organizzazione della memoria... 37 37 Linguaggio macchina Capitolo 73 73.1 Organizzazione della memoria.............................................. 37 73.1.1 Pila per salvare i dati............................................... 37 73.1.2

Dettagli

(71,1), (35,1), (17,1), (8,1), (4,0), (2,0), (1,0), (0,1) 0, 7155 2 = 1, 431 0, 431 2 = 0, 862 0, 896 2 = 1, 792 0, 724 2 = 1, 448 0, 448 2 = 0, 896

(71,1), (35,1), (17,1), (8,1), (4,0), (2,0), (1,0), (0,1) 0, 7155 2 = 1, 431 0, 431 2 = 0, 862 0, 896 2 = 1, 792 0, 724 2 = 1, 448 0, 448 2 = 0, 896 2 Esercizio 2.2 La rappresentazione esadecimale prevede 16 configurazioni corrispondenti a 4 bit. Il contenuto di una parola di 16 bit può essere rappresentato direttamente con 4 digit esadecimali, sostituendo

Dettagli

. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi

. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi Capitolo Terzo Primi passi con Microsoft Access Sommario: 1. Aprire e chiudere Microsoft Access. - 2. Aprire un database esistente. - 3. La barra multifunzione di Microsoft Access 2007. - 4. Creare e salvare

Dettagli

Il microprocessore 8086

Il microprocessore 8086 1 Il microprocessore 8086 LA CPU 8086 Il microprocessore 8086 fa parte della famiglia 80xxx della INTEL. Il capostipite di questa famiglia è stato l 8080, un microprocessore ad 8 bit che ha riscosso un

Dettagli

FASE DEBUGGING: Compiler Linker. controllando che la voce Genera le informazioni per il debug cioè. "Generate debugging information"

FASE DEBUGGING: Compiler Linker. controllando che la voce Genera le informazioni per il debug cioè. Generate debugging information FASE DEBUGGING: Prima della compilazione, si devono inserire 1 nel progetto informazioni per il debug cioè si devono visualizzare le opzioni di progetto seguendo il percorso: controllando che la voce Genera

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 05 La rappresentazione dell informazione Carla Limongelli Ottobre 2011 http://www.dia.uniroma3.it/~java/fondinf/ La rappresentazione

Dettagli

Breve riepilogo della puntata precedente:

Breve riepilogo della puntata precedente: Breve riepilogo della puntata precedente: 1. In C, il passaggio dei parametri alle funzioni avviene sempre per copia, ovvero il valore del parametro viene copiato all'interno della variabile che rappresenta

Dettagli

Parte 1. Vettori di bit - AA. 2012/13 1.1

Parte 1. Vettori di bit - AA. 2012/13 1.1 1.1 Parte 1 Vettori di bit 1.2 Notazione posizionale Ogni cifra assume un significato diverso a seconda della posizione in cui si trova Rappresentazione di un numero su n cifre in base b: Posizioni a n

Dettagli

www.wlascuola.4000.it

www.wlascuola.4000.it 1 Cenni di programmazione Risolvere un problema significa trovare un procedimento che consenta di produrre i risultati, a partire dai dati iniziali, attraverso un processo di elaborazione. La metodologia

Dettagli

Per aprire Calcolatrice, fare clic sul pulsante Start, scegliere Tutti i programmi, Accessori e quindi Calcolatrice.

Per aprire Calcolatrice, fare clic sul pulsante Start, scegliere Tutti i programmi, Accessori e quindi Calcolatrice. LA CALCOLATRICE La Calcolatrice consente di eseguire addizioni, sottrazioni, moltiplicazioni e divisioni. Dispone inoltre delle funzionalità avanzate delle calcolatrici scientifiche e statistiche. È possibile

Dettagli

Creazione e gestione file e cartelle. Le finestre e l organizzazione dati

Creazione e gestione file e cartelle. Le finestre e l organizzazione dati Creazione e gestione file e cartelle Le finestre e l organizzazione dati 34 Organizzare i file sul desktop Le icone, i file e le cartelle che abbiamo sul desktop (desktop è la schermata iniziale del PC,

Dettagli

1. I database. La schermata di avvio di Access

1. I database. La schermata di avvio di Access 7 Microsoft Access 1. I database Con il termine database (o base di dati) si intende una raccolta organizzata di dati, strutturati in maniera tale che, effettuandovi operazioni di vario tipo (inserimento

Dettagli

Guida alla configurazione della posta elettronica dell Ateneo di Ferrara sui più comuni programmi di posta

Guida alla configurazione della posta elettronica dell Ateneo di Ferrara sui più comuni programmi di posta Guida alla configurazione della posta elettronica dell Ateneo di Ferrara sui più comuni programmi di posta. Configurazione Account di posta dell Università di Ferrara con il Eudora email Eudora email può

Dettagli

Algebra Booleana ed Espressioni Booleane

Algebra Booleana ed Espressioni Booleane Algebra Booleana ed Espressioni Booleane Che cosa è un Algebra? Dato un insieme E di elementi (qualsiasi, non necessariamente numerico) ed una o più operazioni definite sugli elementi appartenenti a tale

Dettagli

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Università di Roma Tre Facoltà di Scienze M.F.N. Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

INIZIAMO A IMPARARE WORD

INIZIAMO A IMPARARE WORD Associazione Nazionale Seniores Enel Associazione di solidarietà tra dipendenti e pensionati delle Aziende del Gruppo Enel Sezione Territoriale Lombardia - Nucleo di Milano E-Mail del Nucleo di Milano:

Dettagli