View Single Post
Old 18-04-2014, 19:49   #9
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 13043
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Cosa ti hanno fatto le zone di memoria non inizializzate? Basta che siano valide, no?
Codice:
scanf("%s", (char *)0x800000);
Ci sono diversi casi che mi vengono in mente per il codice postato da ing.

Se il compilatore capisce che quella è una stringa vuota e quindi non alloca area nella regione testo allora quel puntatore chissà a cosa è inizializzato (sarebbe curioso fare una print del puntatore).

Se viceversa il contenuto di input si trovasse nella regione dati non modificabili, in teoria il programma dovrebbe crashare in quanto area read-only...

Detto ciò un programmatore dovrebbe sempre sapere cosa sta facendo, quindi dovrebbe allocare la giusta memoria che gli occorre senza sperare che l'implementazione di turno lo grazi.

Tanto per la cronaca comunque, in sistemi con ALSR e randomizzazione dello spazio degli indirizzi (tutti i sistemi Linux moderni ce l'hanno attiva di default) non si può fare affidamento agli indirizzi di memoria logici in quanto cambiano da un esecuzione all'altra del codice (uno dei meccanismi di protezione da buffer overflow e quant'altro).

Edit: provato ora il programma di ing...

Codice:
giulio@server:~/Programs/ing$ ./a.out
F01 VM, v1.0
=>exit
Segmentation fault
Come prevedibile la stringa è in una regione dati non modificabili.

Ultima modifica di WarDuck : 18-04-2014 alle 20:28.
WarDuck è offline   Rispondi citando il messaggio o parte di esso