Ancora sul programma della domanda 11:
Quello che segue è il sorgente del programma, indicate perché il codice termina con un SIGSEGV
void function(int a, int b, int c) {
char buffer1[5];
char buffer2[10];
int *ret;
ret = buffer1 + 12;
(*ret) += 8;
}
void main() {
int x;
x = 0;
function(1,2,3);
x = 1;
printf("%d\n",x);
}
Vi ricordiamo che la classifica viene stabilita in base alla correttezza, completezza e rapidità della risposta.
Rispondete inviando un messaggio di posta elettronica.
Per questa domanda avete tempo fino a venerdì 29 alle ore 24:00.
La risposta corretta è:
- Nel programma viene sovrascritto il valore del puntatore di ritorno (RET) dell funzione function aggiungedo 8 al suo valore. Tale puntatore si trova 12 byte dopo l'inizio della variabile buffer nello stack. Una volta terminata l'esecuzione della funzione viene eseguito il codice che si trova nella posizione 8 byte più avanti.
- L'indirizzo del puntatore di ritorno è fuori dallo spazio di indirizzamento del processo e il programma viene terminato con un SIGSEGV.
- Trovate l'articolo sui buffer overflow da cui è tratto l'esempio all'indirizzo: http://insecure.org/stf/smashstack.html
La classifica per questa domanda è la seguente:
- alexevil69[AT]gmail[DOT]com: 25
- daniele.athome[AT]gmail[DOT]com: 20