CAPITOLO 4: BASI DI ASSEMBLY
|
|
- Agostina Federici
- 8 anni fa
- Visualizzazioni
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
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
DettagliArchitettura 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
DettagliL 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
DettagliConvertitori 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
DettagliExcel. 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
DettagliIng. 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
Dettagli4. 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:
Dettagliwww.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
DettagliGuida 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
DettagliI.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,
DettagliCapitolo 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
DettagliCodifica: 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
DettagliINSTALLAZIONE 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
DettagliInnanzitutto 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
DettagliInvio 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
Dettagli11010010 = 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;
DettagliCapitolo 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
DettagliLezione 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
DettagliMatematica 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
DettagliOlga 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
DettagliARCHITETTURE 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
DettagliPROCEDURA 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
DettagliAPPUNTI 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....................................
DettagliPowered 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
DettagliAXO 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
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
DettagliCREAZIONE 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
DettagliCLASSE 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
DettagliQuinto 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
DettagliGian 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
DettagliGuida 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ò
DettagliSISTEMI 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
DettagliNote 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
DettagliClasse 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
DettagliDefinire 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
DettagliFile, 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
DettagliCon 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
DettagliInformazione 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
DettagliDispense 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
DettagliNUOVA 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
DettagliESEMPIO 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
DettagliModulo. 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...
DettagliAritmetica 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
DettagliParte 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
DettagliIntroduzione 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:
DettagliStruttura 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
Dettagli4.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
DettagliTRUCCHI 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
DettagliLA 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
DettagliOffice 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
Dettagli2 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
DettagliEXCEL 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
DettagliIl 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
DettagliIl 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
DettagliQuesta 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
DettagliAlessandro 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
DettagliEXCEL 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")
DettagliAppunti 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:
DettagliEsercizio 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
DettagliEsempio 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
DettagliCalcolatori 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
DettagliModuli (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
DettagliCPU. 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
DettagliArduino: 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
Dettagli30 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
DettagliArchitettura 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
DettagliI 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
DettagliArchitettura 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
Dettagli3. 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
DettagliAppunti 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
DettagliSiamo 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
DettagliGESGOLF 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
Dettaglilo 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,
DettagliIl 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
Dettagli5-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
DettagliCorso 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
DettagliI 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
DettagliGHPPEditor è 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
DettagliInformatica 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
DettagliL 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
DettagliRaggruppamenti 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
DettagliWORD 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
DettagliFigura 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)
DettagliInternet 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
DettagliLa 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.
DettagliA 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
DettagliCominciamo 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.
DettagliUtilizzo 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
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
DettagliAutomatizzare 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
DettagliCorso 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
DettagliCONTROLLO 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
DettagliCOS È 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
DettagliGUIDA 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
DettagliL 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
DettagliMAGAZZINO 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
DettagliManuale 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
DettagliDimensione 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
DettagliCome 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
DettagliPersonalizzazione 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