Stack-based buffer overflow
|
|
|
- Silvestro Cuomo
- 8 anni fa
- Visualizzazioni
Transcript
1 Università degli Studi di Milano Facoltà di Scienze e Tecnologie Stack-based buffer overflow Andrea Lanzi A.A Andrea Lanzi Stack-based buffer overflow A.A / 19
2 Classificazione attacchi Attacchi di tipo overflow Stack overflow return-into-stack return-into-libc off-by-one Heap overflow Integer overflow Andrea Lanzi Stack-based buffer overflow A.A / 19
3 Layout memoria di un processo 0xbfffffff ENV/ARG strings stack ENV/ARG pointers argc heap.bss.data.text 0x Andrea Lanzi Stack-based buffer overflow A.A / 19
4 Stack layout Caratteristiche stack Intel x86 struttura LIFO (last-in first-out) cresce da indirizzi alti verso indirizzi bassi due registri per la gestione dello stack: frame pointer (ebp): punta al record di attivazione della procedura corrente stack pointer (esp): punta all ultimo elemento inserito sullo stack istruzioni assembly Intel per manipolare lo stack: push: decrementa esp e inserisce l elemento in cima allo stack, nella locazione puntata da esp pop: elimina l elemento dalla cima dello stack, incrementando esp Andrea Lanzi Stack-based buffer overflow A.A / 19
5 Stack layout Esempio 0xbffeaffc 0xbffeaff8 0xbffeaff4 cima dello stack esp push %eax push %ebx push %ecx pop %eax pop %ecx pop %ebx 0xbffeaff0 0xbffeafec 4 byte eax = x ebx = y ecx = z Andrea Lanzi Stack-based buffer overflow A.A / 19
6 Stack layout Esempio 0xbffeaffc 0xbffeaff8 0xbffeaff4 cima dello stack x esp push %eax push %ebx push %ecx pop %eax pop %ecx pop %ebx 0xbffeaff0 0xbffeafec 4 byte eax = x ebx = y ecx = z Andrea Lanzi Stack-based buffer overflow A.A / 19
7 Stack layout Esempio 0xbffeaffc 0xbffeaff8 0xbffeaff4 cima dello stack x y esp push %eax push %ebx push %ecx pop %eax pop %ecx pop %ebx 0xbffeaff0 0xbffeafec 4 byte eax = x ebx = y ecx = z Andrea Lanzi Stack-based buffer overflow A.A / 19
8 Stack layout Esempio 0xbffeaffc 0xbffeaff8 0xbffeaff4 0xbffeaff0 cima dello stack x y z esp push %eax push %ebx push %ecx pop %eax pop %ecx pop %ebx 0xbffeafec 4 byte eax = x ebx = y ecx = z Andrea Lanzi Stack-based buffer overflow A.A / 19
9 Stack layout Esempio 0xbffeaffc 0xbffeaff8 0xbffeaff4 cima dello stack x y esp push %eax push %ebx push %ecx pop %eax pop %ecx pop %ebx 0xbffeaff0 0xbffeafec 4 byte eax = z ebx = y ecx = z Andrea Lanzi Stack-based buffer overflow A.A / 19
10 Stack layout Esempio 0xbffeaffc 0xbffeaff8 0xbffeaff4 cima dello stack x esp push %eax push %ebx push %ecx pop %eax pop %ecx pop %ebx 0xbffeaff0 0xbffeafec 4 byte eax = z ebx = y ecx = y Andrea Lanzi Stack-based buffer overflow A.A / 19
11 Stack layout Esempio 0xbffeaffc 0xbffeaff8 0xbffeaff4 cima dello stack esp push %eax push %ebx push %ecx pop %eax pop %ecx pop %ebx 0xbffeaff0 0xbffeafec 4 byte eax = z ebx = x ecx = y Andrea Lanzi Stack-based buffer overflow A.A / 19
12 Chiamata a funzione In genere, 3 passi principali: 1 il chiamante inserisce i parametri della funzione sullo stack 2 il chiamante trasferisce il controllo alla funzione (e.g. call <strcpy>), salvando prima sullo stack il return address 3 il chiamato esegue alcune operazioni preliminari (prologo) salvataggio (push) del registro ebp ebp = esp allocazione delle variabili locali alla funzione chiamata Andrea Lanzi Stack-based buffer overflow A.A / 19
13 Terminazione di una funzione Epilogo 1 esp = ebp (ripristino spazio nello stack adibito alle variabili locali della funzione) 2 ripristino ebp relativo al record d attivazione precedente 3 ripristino return address (i.e., indirizzo del chiamante da cui riprendere l esecuzione) Andrea Lanzi Stack-based buffer overflow A.A / 19
14 Chiamata e terminazione di una funzione Esempio 1 / hello.c / 2 3 void foo(int n) 4 { 5 printf( numero: %d;\n, n); 6 } 7 8 int main(int argc, char argv) 9 { 10 foo(10); 11 return 0; 12 } 1 push %ebp 2 mov %esp,%ebp 3 sub $0x8,%esp 4 mov 0x8(%ebp),%eax 5 mov %eax,0x4(%esp) 6 movl $0x ,(%esp) 7 call 0x80482d8 <printf@plt> 8 leave 9 ret 1 push %ebp 2 mov %esp,%ebp 3 sub $0x4,%esp 4 movl $0xa,(%esp) 5 call 0x <foo> 6 mov $0x0,%eax 7 leave 8 ret foo() main() Andrea Lanzi Stack-based buffer overflow A.A / 19
15 Buffer overflow Buffer Insieme di locazioni di memoria contigue, contenente più istanze di uno stesso tipo di dato (e.g. int temperature[10];). Overflow Cosa succede se cerchiamo di inserire in un buffer più dati di quanti ne possa contenere? il sistema rileva una condizione anomala e interrompere l operazione (e.g. Java), oppure il sistema non può rilevare l anomalia, quindi l operazione viene effettuata ugualmente (e.g. C)... ma dove finiscono i dati in più? Andrea Lanzi Stack-based buffer overflow A.A / 19
16 Buffer overflow Buffer Insieme di locazioni di memoria contigue, contenente più istanze di uno stesso tipo di dato (e.g. int temperature[10];). Overflow Cosa succede se cerchiamo di inserire in un buffer più dati di quanti ne possa contenere? il sistema rileva una condizione anomala e interrompere l operazione (e.g. Java), oppure il sistema non può rilevare l anomalia, quindi l operazione viene effettuata ugualmente (e.g. C)... ma dove finiscono i dati in più? Andrea Lanzi Stack-based buffer overflow A.A / 19
17 Esempio di overflow 1 / overflow.c / 2 3 int main() 4 { 5 int i; 6 char buf2[4]; 7 char buf1[6]; 8 9 for(i=0; i<10; i++) 10 buf1[i] = A ; return 0; 13 } buf1 buf i = 0 Andrea Lanzi Stack-based buffer overflow A.A / 19
18 Esempio di overflow 1 / overflow.c / 2 3 int main() 4 { 5 int i; 6 char buf2[4]; 7 char buf1[6]; 8 9 for(i=0; i<10; i++) 10 buf1[i] = A ; return 0; 13 } buf1 buf2 A A A A A A i = 6 Andrea Lanzi Stack-based buffer overflow A.A / 19
19 Esempio di overflow 1 / overflow.c / 2 3 int main() 4 { 5 int i; 6 char buf2[4]; 7 char buf1[6]; 8 9 for(i=0; i<10; i++) 10 buf1[i] = A ; return 0; 13 } buf1 buf2 A A A A A A A A A A i = 10 Andrea Lanzi Stack-based buffer overflow A.A / 19
20 Perché succede? Due ragioni: in alcuni linguaggi (e.g. C) mancano boundary check channeling problem: informazioni di controllo e dati nello stesso canale. Andrea Lanzi Stack-based buffer overflow A.A / 19
21 Perché succede? Negli stack-based buffer overflow si ha: canale: stack. dati: parametri e variabili locali delle funzioni informazioni di controllo: code pointer (e.g., return address) o frame pointer Andrea Lanzi Stack-based buffer overflow A.A / 19
22 Layout stack 0xbfffffff cima dello stack direzione crescita stack return address frame pointer variabili locali direzione crescita memoria Andrea Lanzi Stack-based buffer overflow A.A / 19
23 Programma vulnerabile 1 / vuln.c / 2 3 void foobar(char str) 4 { 5 char buffer[100]; 6 strcpy(buffer, str); 7 } 8 9 int main(int argc, char argv) 10 { 11 if(!argv[1]) return 1; 12 foobar(argv[1]); 13 exit(0); 14 } Effetti sullo stack di strcpy(buffer, str), supponendo che argv[1] sia formato da 108 caratteri A : buffer EBP retaddr i = 0 Andrea Lanzi Stack-based buffer overflow A.A / 19
24 Programma vulnerabile 1 / vuln.c / 2 3 void foobar(char str) 4 { 5 char buffer[100]; 6 strcpy(buffer, str); 7 } 8 9 int main(int argc, char argv) 10 { 11 if(!argv[1]) return 1; 12 foobar(argv[1]); 13 exit(0); 14 } Effetti sullo stack di strcpy(buffer, str), supponendo che argv[1] sia formato da 108 caratteri A : buffer EBP retaddr i = 0 Andrea Lanzi Stack-based buffer overflow A.A / 19
25 Programma vulnerabile 1 / vuln.c / 2 3 void foobar(char str) 4 { 5 char buffer[100]; 6 strcpy(buffer, str); 7 } 8 9 int main(int argc, char argv) 10 { 11 if(!argv[1]) return 1; 12 foobar(argv[1]); 13 exit(0); 14 } Effetti sullo stack di strcpy(buffer, str), supponendo che argv[1] sia formato da 108 caratteri A : buffer EBP retaddr A A A A A A A A A A A A A A A A A A A A i = 100 Andrea Lanzi Stack-based buffer overflow A.A / 19
26 Programma vulnerabile 1 / vuln.c / 2 3 void foobar(char str) 4 { 5 char buffer[100]; 6 strcpy(buffer, str); 7 } 8 9 int main(int argc, char argv) 10 { 11 if(!argv[1]) return 1; 12 foobar(argv[1]); 13 exit(0); 14 } Effetti sullo stack di strcpy(buffer, str), supponendo che argv[1] sia formato da 108 caratteri A : buffer EBP retaddr A A A A A A A A A A A A A A A A A A A A A A A A i = 104 Andrea Lanzi Stack-based buffer overflow A.A / 19
27 Programma vulnerabile 1 / vuln.c / 2 3 void foobar(char str) 4 { 5 char buffer[100]; 6 strcpy(buffer, str); 7 } 8 9 int main(int argc, char argv) 10 { 11 if(!argv[1]) return 1; 12 foobar(argv[1]); 13 exit(0); 14 } Effetti sullo stack di strcpy(buffer, str), supponendo che argv[1] sia formato da 108 caratteri A : buffer EBP retaddr A A A A A A A A A A A A A A A A A A A A A A A A A A A A i = 108 Andrea Lanzi Stack-based buffer overflow A.A / 19
28 Programma vulnerabile 1 / vuln.c / 2 3 void foobar(char str) 4 { 5 char buffer[100]; 6 strcpy(buffer, str); 7 } 8 9 int main(int argc, char argv) 10 { 11 if(!argv[1]) return 1; 12 foobar(argv[1]); 13 exit(0); 14 } Dove ritornerà il processo al termine dell esecuzione della funzione foobar()? Effetti sullo stack di strcpy(buffer, str), supponendo che argv[1] sia formato da 108 caratteri A : buffer EBP retaddr A A A A A A A A A A A A A A A A A A A A A A A A A A A A i = 108 Andrea Lanzi Stack-based buffer overflow A.A / 19
29 Esempio gcc -o vuln vuln.c objdump -d vuln vuln: file format elf32-i386 Disassembly of section.init: <foobar>: : 55 push %ebp : 89 e5 mov %esp,%ebp : 83 ec 78 sub $0x78,%esp a: 8b mov 0x8(%ebp),%eax d: mov %eax,0x4(%esp) 80483a1: 8d 45 9c lea 0xffffff9c(%ebp),%eax 80483a4: mov %eax,(%esp) 80483a7: e8 28 ff ff ff call 80482d ac: c9 leave 80483ad: c3 ret... $(python -c print "X"*100 + "Y"*4 + "\x01\x02\x03\x04" ) Segmentation fault...@laser:~/...$ strace -i./vuln $(python -c print "X"*100 + "Y"*4 + "\x01\x02\x03\x04"; )... [ ] --- SIGSEGV (Segmentation 0 (0) --- Andrea Lanzi Stack-based buffer overflow A.A / 19
30 Obiettivo dell attacco Dirottare il flusso di esecuzione verso codice iniettato dall attaccante. Per fare questo bisogna: iniettare il codice da eseguire (shellcode) all interno di zone di memoria scrivibili del processo (stack,.data, heap,... ) modificare un code pointer del processo (e.g., return address) in modo da poter dirottare il flusso del programma verso il codice iniettato Andrea Lanzi Stack-based buffer overflow A.A / 19
31 Componenti injection vector NOP sled shellcode indirizzo shellcode shellcode: insieme di istruzioni che rappresentano il codice da eseguire (e.g. execve("/bin/sh")) indirizzo dello shellcode: indirizzo del buffer in memoria (e.g.. sullo stack) contenente lo shellcode NOP sled (opzionale): istruzioni (nop) che non fanno nulla, ma aumentano la probabilità di guessing dell indirizzo del buffer Andrea Lanzi Stack-based buffer overflow A.A / 19
32 Componenti injection vector NOP sled shellcode indirizzo shellcode shellcode: insieme di istruzioni che rappresentano il codice da eseguire (e.g. execve("/bin/sh")) indirizzo dello shellcode: indirizzo del buffer in memoria (e.g.. sullo stack) contenente lo shellcode NOP sled (opzionale): istruzioni (nop) che non fanno nulla, ma aumentano la probabilità di guessing dell indirizzo del buffer In che formato sono le istruzioni? Andrea Lanzi Stack-based buffer overflow A.A / 19
33 Esercizi 0x{01,02,03,04,05} Fare in modo che l input fornito ai seguenti programmi faccia stampare la stringa you win! http: //security.di.unimi.it/sicurezza1516/slides/stack1.c Memorandum studente@sec1:~$ sudo echo 0 > /proc/sys/kernel/randomize_va_space studente@sec1:~$ gcc -m32 -fno-stack-protector -zexecstack -o stack1 stack1.c studente@sec1:~$ objdump -d stack1 less studente@sec1:~$ perl -e print "\x41\x41\x41\x41". "\x42"x4 AAAABBBB studente@sec1:~$ strace -fi./stack1... Andrea Lanzi Stack-based buffer overflow A.A / 19
34 Bibliografia Smashing The Stack For Fun And Profit (Aleph One) Phrack Magazine PC Assembly Language, Paul a Carter, http: // Andrea Lanzi Stack-based buffer overflow A.A / 19
La protezione dai memory error exploit
Università degli Studi di Milano Sommario Introduzione 1 Stack Guard Terminator Canaries Random Canaries 2 3 Buffer Overflow Stack Guard Introduzione Buffer Overflow Condizione anomala. Memorizzazione
Reverse engineering: disassembly
Università degli Studi di Milano Facoltà di Scienze Matematiche, Fisiche e Naturali Reverse engineering: disassembly Roberto Paleari Emanuele Passerini
Reverse engineering: disassembly
Università degli Studi di Milano Facoltà di Scienze e Tecnologie Dipartimento di Informatica Reverse engineering: disassembly Lanzi Andrea A.A. 2014 2015 Andrea Lanzi Reverse
Spazio di indirizzamento virtuale
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 016-01 Spazio di indirizzamento virtuale Pietro Di Lena - [email protected] // The function name says it all int stack_overflow (){
Scrivere uno shellcode da zero
Scrivere uno shellcode da zero Requisiti minimi per capire qualcosa in questo tutorial: Una minima conoscenza del C Una buona conoscenza di GNU/Linux Un'ottima conoscenza dell'assembly Molti programmi
Istruzioni di trasferimento dati
Istruzioni di trasferimento dati Leggere dalla memoria su registro: lw (load word) Scrivere da registro alla memoria: sw (store word) Esempio: Codice C: A[8] += h A è un array di numeri interi Codice Assembler:
Corso di Sicurezza Informatica
Corso di Sicurezza Informatica Sicurezza del Software Ing. Giuseppe D Aquì Sicurezza nell informatica Un computer sicuro è un computer spento (Kevin Mitnick) Attacchi informatici Gli attacchi informatici,
Buffer Overflow Attacchi ai servizi di rete
Argomenti trattati Buffer Overflow Attacchi ai servizi di rete Avella Gianluigi Cerqua Pasquale Crucil Sergio D Alessandro Oreste Internet I servizi di rete Buffer Overflow: teoria, esempi Tecniche di
Capire e sfruttare gli stack buffer overflows
Capire e sfruttare gli stack buffer overflows Giovanni Laieta - giovannilaieta@milugorg 8 gennaio 2004 VERSIONE: 07 Copyright (c) 2003 Giovanni Laieta è garantito il permesso di copiare, distribuire e/o
Format String Vulnerability
Università degli Studi di Milano Facoltà di Scienze Matematiche, Fisiche e Naturali Corso di Laurea in Informatica April 15, 2005 Sommario 1 Format string Definizione Format function Componenti delle Format
Corso di Sicurezza Informatica. Sicurezza del software. Ing. Gianluca Caminiti
Corso di Sicurezza Informatica Sicurezza del software Ing. Gianluca Caminiti Software Sicuro Privo di errori (logici) che comportino un comportamento inatteso. Tali bug possono minare la sicurezza dell
Exploiting di applicazioni vulnerabili a buffer overflow sotto Linux
Exploiting di applicazioni vulnerabili a buffer overflow sotto Linux DISCLAIMER: I contenuti di seguito riportati possono, se sfruttati male, compromettere la sicurezza di un sistema informatico. L'autore
Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri
Allocazione dinamica della memoria
Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Tipi di memoria dati Nella macchina astratta C esistono tre tipi di memoria per allocare
ASM: catena di compilazione
ASM: catena di compilazione Lorenzo Dematté October 2, 2011 1 La nostra Macchina Virtuale Una macchina virtuale o modello di programmazione è l ambiente nel quale i programmi girano. Di solito si parla
Processore Danilo Dessì. Architettura degli Elaboratori.
Processore 8088 Architettura degli Elaboratori Danilo Dessì [email protected] Subroutine Anche nel linguaggio assemblativo è possibile suddividere un programma in subroutine Per invocare una subroutine
L ambiente di simulazione SPIM
Architettura degli Elaboratori e delle Reti Lezione 14 L ambiente di simulazione SPIM Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano L 14 1/20
Subroutine in linguaggio macchina: collegamento e passaggio dei parametri. Sottoprogrammi: richiami
Corso di Calcolatori Elettronici I Subroutine in linguaggio macchina: collegamento e passaggio dei parametri Prof. Roberto Canonico Università degli Studi di Napoli Federico II Facoltà di Ingegneria Corso
Subroutine in linguaggio macchina: collegamento e passaggio dei parametri
Corso di Calcolatori Elettronici I Subroutine in linguaggio macchina: collegamento e passaggio dei parametri Prof. Roberto Canonico Università degli Studi di Napoli Federico II Facoltà di Ingegneria Corso
Organizzazione della Memoria usata dai Processi
Orgnizzzione dell Memori ust di Processi Indirizzi m stck hep dt 0 tet 1 L struttur dti Stck (o Pil) LIFO (lst in - first out) Operzioni: Push (ggiunge un elemento in cim llo stck (che cresce verso gli
Reverse engineering: executable file format
Università degli Studi di Milano Facoltà di Scienze Matematiche, Fisiche e Naturali Reverse engineering: executable file format Roberto Paleari Emanuele Passerini
A#acchi Base: Buffer Overflow
Pattern Recognition and Applications Lab A#acchi Base: Buffer Overflow Do#. Ing. Davide Maiorca, Ph.D. [email protected] Corso di Sicurezza Informa
ARM: stack e subroutine
ARM: stack e subroutine 05.d Le istruzioni di accesso allo stack L istruzione di chiamata a subroutine Gestione degli stack frame Istruzione di store multiplo (STM Le istruzioni LDR e STR operano su parole
L insieme delle istruzioni (6)
L insieme delle istruzioni (6) Architetture dei Calcolatori (lettere A-I) Alcune note conclusive I due principi dell architettura a programma memorizzato Uso di istruzioni indistinguibili dai dati Uso
C: panoramica. Violetta Lonati
C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati
Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata
Puntatori int i = 10; int * pi = &i; pi i = 10 116 int * pi = pi contiene un informazione che mi permette di accedere ( puntare ) ad una variabile intera Un puntatore contiene un numero che indica la locazione
Assembly. Modello x86
Assembly Modello x86 1 Il microprocessore Un MICROPROCESSORE è un circuito integrato dotato di una struttura circuitale in grado di attuare un prefissato SET di ISTRUZIONI 2 Caratteristiche del microprocessore
Strutture Dati Dinamiche
Strutture Dati Dinamiche Motivazioni Le variabili considerate fino a questo punto devono essere dichiarate staticamente, ossia la loro esistenza, il loro nome e la loro dimensione devono essere previsti
I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore
I puntatori Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore...... L operatore & fornisce l indirizzo di un oggetto: p = &c; assegna a p l indirizzo di c, i.e., p
Architettura di una CPU
Massimo VIOLANTE Politecnico di Torino Dipartimento di Automatica e Informatica Sommario Organizzazione di un processore Linguaggio macchina Modi di indirizzamento Tipi di istruzioni 2 M. Violante 1.1
Uso avanzato dei puntatori Allocazione dinamica della memoria
Uso avanzato dei puntatori Allocazione dinamica della memoria Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica
Calcolatori Elettronici
Calcolatori Elettronici Il linguaggio assemblativo MIPS (4) Le function (2) Gestione dei sottoprogrammi $a0 - $a3 - $v1 $ra : 4 registri argomento per il passaggio dei parametri : due registri per la restituzione
Perché il linguaggio C?
Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare
1 Esercizi con architettura a 1 bus
1 Esercizi con architettura a 1 bus 1.1 Fetch dell istruzione NOTA: l istruzione ClearY azzera il registro Y mentre l istruzione CB imposta a 1 il bit di riporto/prestito in modo da sommare/sottrarre 1.
Linguaggio Macchina. Linguaggio Macchina. Linguaggio Macchina. Linguaggio Macchina ADD A,B ISTRUZIONE SUCCESSIVA
Lezione n.11 n.11 Lezione n. 11 ARCHITETTURA INTERNA ARCHITETTURA ESTERNA CODICE MACCHINA MODI DI INDIRIZZAMENTO ARCHITETTURE A PIU' INDIRIZZI In questa lezione verranno introdotti i concetti di base relativi
2006-2011 maurizio pizzonia sicurezza dei sistemi informatici e delle reti. esercizi su vulnerabilità del software e delle reti
esercizi su vulnerabilità del software e delle reti 1 input fidato e non per quali dei seguenti software una vulnerabilità rappresenta una minaccia? in quali condizioni? apache: server web il kernel linux
Fondamenti di Informatica T. Linguaggio C: Stack e Ricorsione
Linguaggio C: Stack e Ricorsione FUNZIONI: IL MODELLO A RUN-TIME Ogni volta che viene invocata una funzione: si crea di una nuova attivazione (istanza) del servitore viene allocata la memoria per i parametri
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa
Gestione dinamica della memoria
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Gestione dinamica della memoria Pietro Di Lena - [email protected] A pessimistic programmer sees the array as half empty.
Esercitazione: Implementazione in linguaggio C dell ADT. Stack con l utilizzo. di linked list
Esercitazione: Implementazione in linguaggio C dell ADT Stack con l utilizzo di linked list Laboratorio di Programmazione Introduzione un ADT (Abstract Data Type) è un modello (formale) che generalizza
Interazione con il DOS e il BIOS
Interazione con il DOS e il BIOS ARGOMENTI PRESENTATI IN QUESTI LUCIDI Routine di BIOS e DOS Due modalità diverse di restituire il controllo al DOS L interazione con le routine del DOS: l interrupt 21H
Esercizi su microistruzioni. 1 Esercizi con architettura a 1 bus
Esercizi su microistruzioni Ogni riga elenca i segnali che vengono attivati nello stesso ciclo di clock. Si assume che lettura e scrittura dei registri avvengano all inizio e alla fine del ciclo di clock,
Il linguaggio C. Puntatori e dintorni
Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;
Introduzione a GCC: GNU Compiler Collection
Introduzione a GCC: GNU Compiler Collection Caratteristiche di GCC Compilatore multipiattaforma modulare Disponibile per tutti i principali sistemi operativi Può produrre programmi per la maggior parte
Funzioni. Il modello console. Interfaccia in modalità console
Funzioni Interfaccia con il sistema operativo Argomenti sulla linea di comando Parametri argc e argv Valore di ritorno del programma La funzione exit Esercizio Calcolatrice 2, presente in tutti i programmi
Gestione della memoria
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza [email protected] http://www.dis.uniroma1.it/~salza/fondamenti.htm
STUDIO DI BUFFER OVERFLOW IN AMBIENTE WIN32 E REALIZZAZIONE DI UN TOOL PER LA RICERCA AUTOMATICA DI PROGRAMMI VULNERABILI A QUESTO TIPO DI ATTACCO
UNIVERSITÀ DEGLI STUDI DI MILANO FACOLTÀ DI SCIENZE MATEMATICHE, FISICHE E NATURALI CORSO DI LAUREA TRIENNALE IN INFORMATICA STUDIO DI BUFFER OVERFLOW IN AMBIENTE WIN32 E REALIZZAZIONE DI UN TOOL PER LA
Stringhe e allocazione dinamica della memoria
Stringhe e allocazione dinamica della memoria Esercizio Scrivere un programma strings.c che legge da standard input una sequenza di parole separate da uno o più spazi, e stampa le parole lette, una per
Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE
Input/output da file Il linguaggio C non contiene istruzioni di I/O, in quanto tali operazioni vengono eseguite tramite funzioni di libreria standard. Questo approccio rende estremamente flessibile e potente
Parametri Formali di una Funzione e Record di Attivazione
Parametri Formali di una Funzione e Attivazione Un record di attivazione rappresenta il mondo di una funzione, e contiene tutto ciò che ne caratterizza l esistenza, tra cui ad esempio: le variabili locali
Gestione della Memoria
Gestione della Memoria Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari Linguaggi di Programmazione [010194] 27 apr, 2016 Sommario 1 Tecniche di gestione Progetto della gestione
Sottoprogrammi in linguaggio assembly del Motorola 68000
Sottoprogrammi in linguaggio assembly del Motorola 68000 Daniele Paolo Scarpazza [email protected] Politecnico di Milano Ultimo aggiornamento: 10 Maggio 2005 Bibliografia Sezioni 4.9, 5.6
