[RoLUG] RSG: Buffer overflow paper update

Roccatello Eduard rolug@lists.linux.it
Mon, 17 Feb 2003 22:15:59 +0100


Alle 01:08, luned=EC 17 febbraio 2003, Ferdinando Pucci ha scritto:
> On Sat, 15 Feb 2003 23:10:20 +0100
> Mah... non so... :-)
dai :-)

> La regione "Data" contiene dati sia inizializzati che non e indirizza
> anche le variabili statiche, imagazzinate in questa regione di memoria.
>
> Che diff c'=E8 tra dati inizializzati e non? A parte questo riformulere=
i
> la frase cosi, mi sembra piu chiaro:
> La regione "Data" contiene dati inizializzati, dati non inizializzati e
> variabili statiche.
Dati inizializzati: variabili alle quali =E8 stato assegnato un valore
Dati non inizializzati: variabili alle quali non =E8 stato assegnato un v=
alore

Esempio:
int a; //dato non inizializzato
int a =3D 1; //dato inizializzato


> Se uso "int main(void) ..." non ho l'err gcc 2.95.4:
> "code.c:5: warning: return type of `main' is not `int'"
> ed il disassemble non mi da tutti i nop:
a me fa lo stesso eseguibile sia con void che con int
e senza i nop (ora)... curiosa la cosa :-)
che sia un bug? ho gcc 2.95.3
ora correggo il paper con il nuovo codice
cmq ogni asm =E8 diverso da cpu a cpu e da compilatore a compilatore

> I frame pointer, stack pointer e stack frame che sono?
> Variabili? Costanti? Puntatori? Panini? :-)
registri del microprocessore :-)

> Che ne dici di commentare riga per riga l'output di
> disassemble invece che nel paragrafo? E' molto incasinato
> imho quel pezzo :-) per non parlare del calcolo che hai
> fatto (0x40?), che non ho neancora capito... :~/
64dec =3D 40hex ovvero lo spazio per 64 char.
il compilatore ne alloca 72dec. 72d-64d =3D 8d -> 40h+8h =3D 48hex
ci sono 8 bytes in pi=F9 che aggiunge il compilatore e servono a contener=
e=20
eventuali overflow (in modo da non sovrascrivere i registri). in gergo=20
tecnico si chiama Padding
--=20
Roccatello Eduard
RoLUG member @ http://rovigo.linux.it
Webmaster @ http://www.pcimprover.it
Look to the headers for my GnuPG key