CAPITOLO 4: BASI DI ASSEMBLY

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 abcdefghilmnopqrstuvzabcdefg@^rá = 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:

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

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

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

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

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

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

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

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

Guida all uso di Java Diagrammi ER

Guida all uso di Java Diagrammi ER Guida all uso di Java Diagrammi ER Ver. 1.1 Alessandro Ballini 16/5/2004 Questa guida ha lo scopo di mostrare gli aspetti fondamentali dell utilizzo dell applicazione Java Diagrammi ER. Inizieremo con

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

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti Capitolo 3 L applicazione Java Diagrammi ER Dopo le fasi di analisi, progettazione ed implementazione il software è stato compilato ed ora è pronto all uso; in questo capitolo mostreremo passo passo tutta

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

INSTALLAZIONE NUOVO CLIENT TUTTOTEL (04 Novembre 2014)

INSTALLAZIONE NUOVO CLIENT TUTTOTEL (04 Novembre 2014) INSTALLAZIONE NUOVO CLIENT TUTTOTEL (04 Novembre 2014) Se la Suite risulta già stata installata e quindi sono già presenti le configurazioni di seguito indicate, si prega di andare direttamente alla fine

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

Invio SMS. DM Board ICS Invio SMS

Invio SMS. DM Board ICS Invio SMS Invio SMS In questo programma proveremo ad inviare un SMS ad ogni pressione di uno dei 2 tasti della DM Board ICS. Per prima cosa creiamo un nuovo progetto premendo sul pulsante (Create new project): dove

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

Capitolo Quarto...2 Le direttive di assemblaggio di ASM 68000...2 Premessa...2 1. Program Location Counter e direttiva ORG...2 2.

Capitolo Quarto...2 Le direttive di assemblaggio di ASM 68000...2 Premessa...2 1. Program Location Counter e direttiva ORG...2 2. Capitolo Quarto...2 Le direttive di assemblaggio di ASM 68000...2 Premessa...2 1. Program Location Counter e direttiva ORG...2 2. Dichiarazione di dati: le direttive DS e DC...3 2.1 Direttiva DS...3 2.2

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

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

Olga Scotti. Basi di Informatica. File e cartelle

Olga Scotti. Basi di Informatica. File e cartelle Basi di Informatica File e cartelle I file Tutte le informazioni contenute nel disco fisso (memoria permanente del computer che non si perde neanche quando togliamo la corrente) del computer sono raccolte

Dettagli

ARCHITETTURE MICROPROGRAMMATE. 1. Necessità di un architettura microprogrammata 1. Cos è un architettura microprogrammata? 4

ARCHITETTURE MICROPROGRAMMATE. 1. Necessità di un architettura microprogrammata 1. Cos è un architettura microprogrammata? 4 ARCHITETTURE MICROPROGRAMMATE. 1 Necessità di un architettura microprogrammata 1 Cos è un architettura microprogrammata? 4 Struttura di una microistruzione. 5 Esempi di microprogrammi 9 Esempio 1 9 Esempio

Dettagli

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0)

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0) PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0) (Da effettuare non prima del 01/01/2011) Le istruzioni si basano su un azienda che ha circa 1000 articoli, che utilizza l ultimo

Dettagli

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI Indice 1 Le frazioni algebriche 1.1 Il minimo comune multiplo e il Massimo Comun Divisore fra polinomi........ 1. Le frazioni algebriche....................................

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

AXO Architettura dei Calcolatori e Sistema Operativo. processo di assemblaggio

AXO Architettura dei Calcolatori e Sistema Operativo. processo di assemblaggio AXO Architettura dei Calcolatori e Sistema Operativo processo di assemblaggio linguaggio assembly è il linguaggio simbolico che consente di programmare un calcolatore utilizzando le istruzioni del linguaggio

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

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

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

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

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

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

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

Note per scaricare e installare il software cliccando alla pagina DOWNLOAD del sito,

Note per scaricare e installare il software cliccando alla pagina DOWNLOAD del sito, Come ben sapete, anch io,come voi, sono golosa di schemi,trovati in internet e nei giornali, e questo comporta, soprattutto per gli schemi virtuali, che devo cercare una soluzione per evitare che il mio

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

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

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

Con accesso remoto s'intende la possibilità di accedere ad uno o più Personal Computer con un modem ed una linea telefonica.

Con accesso remoto s'intende la possibilità di accedere ad uno o più Personal Computer con un modem ed una linea telefonica. Tecnologie informatiche ACCESSO REMOTO CON WINDOWS Con accesso remoto s'intende la possibilità di accedere ad uno o più Personal Computer con un modem ed una linea telefonica. Un esempio di tale servizio

Dettagli

Informazione analogica e digitale

Informazione analogica e digitale L informazione L informazione si può: rappresentare elaborare gestire trasmettere reperire L informatica offre la possibilità di effettuare queste operazioni in modo automatico. Informazione analogica

Dettagli

Dispense di Informatica per l ITG Valadier

Dispense di Informatica per l ITG Valadier La notazione binaria Dispense di Informatica per l ITG Valadier Le informazioni dentro il computer All interno di un calcolatore tutte le informazioni sono memorizzate sottoforma di lunghe sequenze di

Dettagli

NUOVA PROCEDURA COPIA ED INCOLLA PER L INSERIMENTO DELLE CLASSIFICHE NEL SISTEMA INFORMATICO KSPORT.

NUOVA PROCEDURA COPIA ED INCOLLA PER L INSERIMENTO DELLE CLASSIFICHE NEL SISTEMA INFORMATICO KSPORT. NUOVA PROCEDURA COPIA ED INCOLLA PER L INSERIMENTO DELLE CLASSIFICHE NEL SISTEMA INFORMATICO KSPORT. Con l utilizzo delle procedure di iscrizione on line la società organizzatrice ha a disposizione tutti

Dettagli

ESEMPIO 1: eseguire il complemento a 10 di 765

ESEMPIO 1: eseguire il complemento a 10 di 765 COMPLEMENTO A 10 DI UN NUMERO DECIMALE Sia dato un numero N 10 in base 10 di n cifre. Il complemento a 10 di tale numero (N ) si ottiene sottraendo il numero stesso a 10 n. ESEMPIO 1: eseguire il complemento

Dettagli

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO... Modulo A Programmiamo in Pascal Unità didattiche 1. Installiamo il Dev-Pascal 2. Il programma e le variabili 3. Input dei dati 4. Utilizziamo gli operatori matematici e commentiamo il codice COSA IMPAREREMO...

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

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

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

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

4.1.1.1 APRIRE UN PROGRAMMA DI FOGLIO ELETTRONICO

4.1.1.1 APRIRE UN PROGRAMMA DI FOGLIO ELETTRONICO 4.1 PER INIZIARE 4.1.1 PRIMI PASSI COL FOGLIO ELETTRONICO 4.1.1.1 APRIRE UN PROGRAMMA DI FOGLIO ELETTRONICO L icona del vostro programma Excel può trovarsi sul desktop come in figura. In questo caso basta

Dettagli

TRUCCHI PER GIMP - Elemento a colori in foto bianco e nero

TRUCCHI PER GIMP - Elemento a colori in foto bianco e nero TRUCCHI PER GIMP - Elemento a colori in foto bianco e nero Salve Prof. Cantaro come promesso le mando un altro articolo da poter inserire nelle sue guide. Questa volta però a differenza dell'ultima,ho

Dettagli

LA TRASMISSIONE DELLE INFORMAZIONI QUARTA PARTE 1

LA TRASMISSIONE DELLE INFORMAZIONI QUARTA PARTE 1 LA TRASMISSIONE DELLE INFORMAZIONI QUARTA PARTE 1 I CODICI 1 IL CODICE BCD 1 Somma in BCD 2 Sottrazione BCD 5 IL CODICE ECCESSO 3 20 La trasmissione delle informazioni Quarta Parte I codici Il codice BCD

Dettagli

Office 2007 Lezione 02. Le operazioni più

Office 2007 Lezione 02. Le operazioni più Le operazioni più comuni Le operazioni più comuni Personalizzare l interfaccia Creare un nuovo file Ieri ci siamo occupati di descrivere l interfaccia del nuovo Office, ma non abbiamo ancora spiegato come

Dettagli

2 Fortino Lugi. Figura Errore. Nel documento non esiste testo dello stile specificato.-3 -- Finestra attiva o nuovo documento

2 Fortino Lugi. Figura Errore. Nel documento non esiste testo dello stile specificato.-3 -- Finestra attiva o nuovo documento 1 Fortino Lugi STAMPA UNIONE OFFICE 2000 Vi sarà capitato sicuramente di ricevere lettere pubblicitarie indirizzate personalmente a voi; ovviamente quelle missive non sono state scritte a mano, ma utilizzando

Dettagli

EXCEL PER WINDOWS95. sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area di lavoro, detta foglio di lavoro,

EXCEL PER WINDOWS95. sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area di lavoro, detta foglio di lavoro, EXCEL PER WINDOWS95 1.Introduzione ai fogli elettronici I fogli elettronici sono delle applicazioni che permettono di sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area

Dettagli

Il programma CONFELMOD CAD creazione e modifica

Il programma CONFELMOD CAD creazione e modifica CREAZIONE DEI PEZZI DEL MODELLO Dopo aver fatto la lista di tutti i componenti nella scheda modello si passa alla creazione dei pezzi. Si seleziona il modello e si clicca su Apri Modello 1 Con questa operazione

Dettagli

Il sofware è inoltre completato da una funzione di calendario che consente di impostare in modo semplice ed intuitivo i vari appuntamenti.

Il sofware è inoltre completato da una funzione di calendario che consente di impostare in modo semplice ed intuitivo i vari appuntamenti. SH.MedicalStudio Presentazione SH.MedicalStudio è un software per la gestione degli studi medici. Consente di gestire un archivio Pazienti, con tutti i documenti necessari ad avere un quadro clinico completo

Dettagli

Questa guida vi illustrerà i principali passaggi da eseguire per l'inserimento dei Bandi di gara.

Questa guida vi illustrerà i principali passaggi da eseguire per l'inserimento dei Bandi di gara. Piccolo Manuale Manuale Pt 1ª Registrazione (Login) Questa guida vi illustrerà i principali passaggi da eseguire per l'inserimento dei Bandi di gara. Riceverete una email contenente: Link della vostra

Dettagli

Alessandro Pellegrini

Alessandro Pellegrini Esercitazione sulle Rappresentazioni Numeriche Esistono 1 tipi di persone al mondo: quelli che conoscono il codice binario e quelli che non lo conoscono Alessandro Pellegrini Cosa studiare prima Conversione

Dettagli

EXCEL FUNZIONI PRINCIPALI

EXCEL FUNZIONI PRINCIPALI EXCEL FUNZIONI PRINCIPALI Funzione SE() Sintassi: SE(VERIFICA, VALORE SE VERO, VALORE SE FALSO): verifica un valore e ritorna una risposta in base al risultato vero/falso Esempio: =SE(A2=15; "OK"; "NO")

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

Esercizio data base "Biblioteca"

Esercizio data base Biblioteca Rocco Sergi Esercizio data base "Biblioteca" Database 2: Biblioteca Testo dell esercizio Si vuole realizzare una base dati per la gestione di una biblioteca. La base dati conterrà tutte le informazioni

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

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

Moduli (schede compilabili) in Word Esempio: scheda di alimentazione per un degente

Moduli (schede compilabili) in Word Esempio: scheda di alimentazione per un degente Moduli (schede compilabili) in Word Esempio: scheda di alimentazione per un degente Vediamo come utilizzare Word per costruire un modulo compilabile, ovvero una scheda che contenga delle parti fisse di

Dettagli

CPU. Maurizio Palesi

CPU. Maurizio Palesi CPU Central Processing Unit 1 Organizzazione Tipica CPU Dispositivi di I/O Unità di controllo Unità aritmetico logica (ALU) Terminale Stampante Registri CPU Memoria centrale Unità disco Bus 2 L'Esecutore

Dettagli

Arduino: Programmazione

Arduino: Programmazione Programmazione formalmente ispirata al linguaggio C da cui deriva. I programmi in ARDUINO sono chiamati Sketch. Un programma è una serie di istruzioni che vengono lette dall alto verso il basso e convertite

Dettagli

30 giorni di prova gratuiti, entra nel sito www.mypckey.com scarica e installa subito mypckey

30 giorni di prova gratuiti, entra nel sito www.mypckey.com scarica e installa subito mypckey DA OGGI NON IMPORTA DOVE SEI, IL TUO PC DELL UFFICIO E SEMPRE A TUA DISPOSIZIONE! Installa solo un semplice programma (nessun hardware necessario!), genera la tua chiavetta USB, e sei pronto a prendere

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

I sistemi di numerazione

I sistemi di numerazione I sistemi di numerazione 01-INFORMAZIONE E SUA RAPPRESENTAZIONE Sia dato un insieme finito di caratteri distinti, che chiameremo alfabeto. Utilizzando anche ripetutamente caratteri di un alfabeto, si possono

Dettagli

Architettura hardware

Architettura hardware Architettura dell elaboratore Architettura hardware la parte che si può prendere a calci Sistema composto da un numero elevato di componenti, in cui ogni componente svolge una sua funzione elaborazione

Dettagli

3. Installare Wamp Server

3. Installare Wamp Server E107 WEB SYSTEM Corso on line di progettazione siti dinamici: livello base R E A L I Z Z A Z I O N E D I 3. Installare Wamp Server By e107 Italian Team Sito web:http://www.e107italia.org Contatto: admin@e107italia.org

Dettagli

Appunti sulla Macchina di Turing. Macchina di Turing

Appunti sulla Macchina di Turing. Macchina di Turing Macchina di Turing Una macchina di Turing è costituita dai seguenti elementi (vedi fig. 1): a) una unità di memoria, detta memoria esterna, consistente in un nastro illimitato in entrambi i sensi e suddiviso

Dettagli

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo. DALLE PESATE ALL ARITMETICA FINITA IN BASE 2 Si è trovato, partendo da un problema concreto, che con la base 2, utilizzando alcune potenze della base, operando con solo addizioni, posso ottenere tutti

Dettagli

GESGOLF SMS ONLINE. Manuale per l utente

GESGOLF SMS ONLINE. Manuale per l utente GESGOLF SMS ONLINE Manuale per l utente Procedura di registrazione 1 Accesso al servizio 3 Personalizzazione della propria base dati 4 Gestione dei contatti 6 Ricerca dei contatti 6 Modifica di un nominativo

Dettagli

lo 2 2-1 - PERSONALIZZARE LA FINESTRA DI WORD 2000

lo 2 2-1 - PERSONALIZZARE LA FINESTRA DI WORD 2000 Capittol lo 2 Visualizzazione 2-1 - PERSONALIZZARE LA FINESTRA DI WORD 2000 Nel primo capitolo sono state analizzate le diverse componenti della finestra di Word 2000: barra del titolo, barra dei menu,

Dettagli

Il calendario di Windows Vista

Il calendario di Windows Vista Il calendario di Windows Vista Una delle novità introdotte in Windows Vista è il Calendario di Windows, un programma utilissimo per la gestione degli appuntamenti, delle ricorrenze e delle attività lavorative

Dettagli

5-1 FILE: CREAZIONE NUOVO DOCUMENTO

5-1 FILE: CREAZIONE NUOVO DOCUMENTO Capittol lo 5 File 5-1 FILE: CREAZIONE NUOVO DOCUMENTO In Word è possibile creare documenti completamente nuovi oppure risparmiare tempo utilizzando autocomposizioni o modelli, che consentono di creare

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T2 3-Compilatori e interpreti 1 Prerequisiti Principi di programmazione Utilizzo di un compilatore 2 1 Introduzione Una volta progettato un algoritmo codificato in un linguaggio

Dettagli

I componenti di un Sistema di elaborazione. Memoria centrale. È costituita da una serie di CHIP disposti su una scheda elettronica

I componenti di un Sistema di elaborazione. Memoria centrale. È costituita da una serie di CHIP disposti su una scheda elettronica I componenti di un Sistema di elaborazione. Memoria centrale Memorizza : istruzioni dati In forma BINARIA : 10001010101000110101... È costituita da una serie di CHIP disposti su una scheda elettronica

Dettagli

GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain.

GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain. *+33(GLWRU GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain. Il programma si basa su un architettura di tasti funzionali presenti

Dettagli

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter Informatica B a.a 2005/06 (Meccanici 4 squadra) Scaglione: da PO a ZZZZ PhD. Ing. Michele Folgheraiter Architettura del Calcolatore Macchina di von Neumann Il calcolatore moderno è basato su un architettura

Dettagli

L archiviazione della posta elettronica può aiutarci a recuperare spazio senza costringerci a cestinare documenti importanti

L archiviazione della posta elettronica può aiutarci a recuperare spazio senza costringerci a cestinare documenti importanti L archiviazione della posta elettronica può aiutarci a recuperare spazio senza costringerci a cestinare documenti importanti Potete immaginare un ufficio senza archivio? Sarebbe un inferno. Dover rintracciare

Dettagli

Raggruppamenti Conti Movimenti

Raggruppamenti Conti Movimenti ESERCITAZIONE PIANO DEI CONTI Vogliamo creare un programma che ci permetta di gestire, in un DB, il Piano dei conti di un azienda. Nel corso della gestione d esercizio, si potranno registrare gli articoli

Dettagli

WORD per WINDOWS95. Un word processor e` come una macchina da scrivere ma. con molte più funzioni. Il testo viene battuto sulla tastiera

WORD per WINDOWS95. Un word processor e` come una macchina da scrivere ma. con molte più funzioni. Il testo viene battuto sulla tastiera WORD per WINDOWS95 1.Introduzione Un word processor e` come una macchina da scrivere ma con molte più funzioni. Il testo viene battuto sulla tastiera ed appare sullo schermo. Per scrivere delle maiuscole

Dettagli

Figura 1 Le Icone dei file di Excel con e senza macro.

Figura 1 Le Icone dei file di Excel con e senza macro. 18 Le macro Le macro rappresentano una soluzione interessante per automatizzare e velocizzare l esecuzione di operazioni ripetitive. Le macro, di fatto, sono porzioni di codice VBA (Visual Basic for Applications)

Dettagli

Internet i vostri figli vi spiano! La PAROLA-CHIAVE: cacao Stralci di laboratorio multimediale

Internet i vostri figli vi spiano! La PAROLA-CHIAVE: cacao Stralci di laboratorio multimediale Internet i vostri figli vi spiano! La PAROLA-CHIAVE: cacao Stralci di laboratorio multimediale Ins: nel laboratorio del Libro avevamo detto che qui, nel laboratorio multimediale, avremmo cercato qualcosa

Dettagli

La microarchitettura. Didattica della strumentazione digitale e sistemi a microprocessore anno accademico 2006 2007 pagina 1

La microarchitettura. Didattica della strumentazione digitale e sistemi a microprocessore anno accademico 2006 2007 pagina 1 La microarchitettura. anno accademico 2006 2007 pagina 1 Integer Java virtual machine Ogni microprocessore può avere una microarchitettura diversa, ma la modalità di funzionamento per certi aspetti è generale.

Dettagli

A destra è delimitata dalla barra di scorrimento verticale, mentre in basso troviamo una riga complessa.

A destra è delimitata dalla barra di scorrimento verticale, mentre in basso troviamo una riga complessa. La finestra di Excel è molto complessa e al primo posto avvio potrebbe disorientare l utente. Analizziamone i componenti dall alto verso il basso. La prima barra è la barra del titolo, dove troviamo indicato

Dettagli

Cominciamo dalla barra multifunzione, ossia la struttura a schede che ha sostituito la barra dei menu e la barra delle icone (Figura 1).

Cominciamo dalla barra multifunzione, ossia la struttura a schede che ha sostituito la barra dei menu e la barra delle icone (Figura 1). La barra multifunzione La barra multifunzione e il pulsante Microsoft Office Se avete lavorato per tanti anni con la suite da ufficio Office, questa nuova versione 2007 può disorientarvi davvero molto.

Dettagli

Utilizzo delle formule in Excel

Utilizzo delle formule in Excel Utilizzo delle formule in Excel Excel è dotato di un potente motore di calcolo che può essere utilizzato per elaborare i dati immessi dagli utenti. I calcoli sono definiti mediante formule. Ogni formula

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

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione Automatizzare i compiti ripetitivi I file batch Anno accademico 2000-01 1 Spesso capita di dover eseguire ripetutatmente una data sequenza di comandi Introdurli uno a uno da tastiera è un processo lento

Dettagli

Corso base di informatica

Corso base di informatica Corso base di informatica AVVIARE IL COMPUTER Per accendere il computer devi premere il pulsante di accensione posto di norma nella parte frontale del personal computer. Vedrai apparire sul monitor delle

Dettagli

CONTROLLO ORTOGRAFICO E GRAMMATICALE

CONTROLLO ORTOGRAFICO E GRAMMATICALE CONTROLLO ORTOGRAFICO E GRAMMATICALE Quando una parola non è presente nel dizionario di Word, oppure nello scrivere una frase si commettono errori grammaticali, allora si può eseguire una delle seguenti

Dettagli

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware COS È UN LINGUAGGIO? Un linguaggio è un insieme di parole e di metodi di combinazione delle

Dettagli

GUIDA UTENTE BILLIARDS COUNTER (Vers. 1.2.0)

GUIDA UTENTE BILLIARDS COUNTER (Vers. 1.2.0) ------------------------------------------------- GUIDA UTENTE BILLIARDS COUNTER (Vers. 1.2.0) GUIDA UTENTE BILLIARDS COUNTER (Vers. 1.2.0)... 1 Installazione Billiards Counter... 2 Primo avvio e configurazione

Dettagli

L amministratore di dominio

L amministratore di dominio L amministratore di dominio Netbuilder consente ai suoi clienti di gestire autonomamente le caselle del proprio dominio nel rispetto dei vincoli contrattuali. Ciò è reso possibile dall esistenza di un

Dettagli

MAGAZZINO FISCALE (agg. alla rel. 3.4.1)

MAGAZZINO FISCALE (agg. alla rel. 3.4.1) MAGAZZINO FISCALE (agg. alla rel. 3.4.1) Per ottenere valori corretti nell inventario al LIFO o FIFO è necessario andare in Magazzino Fiscale ed elaborare i dati dell anno che ci serve valorizzare. Bisogna

Dettagli

Manuale Utente Amministrazione Trasparente GA

Manuale Utente Amministrazione Trasparente GA Manuale Utente GA IDENTIFICATIVO DOCUMENTO MU_AMMINISTRAZIONETRASPARENTE-GA_1.0 Versione 1.0 Data edizione 03.05.2013 1 Albo Pretorio On Line TABELLA DELLE VERSIONI Versione Data Paragrafo Descrizione

Dettagli

Dimensione di uno Spazio vettoriale

Dimensione di uno Spazio vettoriale Capitolo 4 Dimensione di uno Spazio vettoriale 4.1 Introduzione Dedichiamo questo capitolo ad un concetto fondamentale in algebra lineare: la dimensione di uno spazio vettoriale. Daremo una definizione

Dettagli

Come modificare la propria Home Page e gli elementi correlati

Come modificare la propria Home Page e gli elementi correlati Come modificare la propria Home Page e gli elementi correlati Versione del documento: 3.0 Ultimo aggiornamento: 2006-09-15 Riferimento: webmaster (webmaster.economia@unimi.it) La modifica delle informazioni

Dettagli

Personalizzazione documenti Word

Personalizzazione documenti Word Personalizzazione documenti Word E possibile personalizzare tutte le stampe in formato word presenti nelle diverse aree di Axios Italia. Le stampe in formato word, caratterizzate dal simbolo gestione testi.,

Dettagli