[HACK] Re: Smashing the stack for fun & profit

RoMaNSoFt roman at madrid.com
Wed Dec 5 16:24:55 CET 2001


 (esta es la contestación que le mandé en privado a Zero en su dia;
básicamente mi respuesta fue que se puede deber a optimizaciones del
compilador aunque  realmente no lo se a ciencia cierta)

================

 A ver, lo primero de todo:

¿Por que no posteas tu cuestión a la lista?? Creo que es interesante y
ademas te podrá ayudar mas gente.

>0x80481b4 <main>:       push   %ebp
>0x80481b5 <main+1>:     mov    %esp,%ebp
>0x80481b7 <main+3>:     sub    $0x18,%esp
>0x80481ba <main+6>:     movl   $0x806fdc8,0xfffffff8(%ebp)
>0x80481c1 <main+13>:    movl   $0x0,0xfffffffc(%ebp)
>
>Este es el desensablado del programa en cuestion. Tengo varias dudas con
>respecto al susodicho. La primera de todas es cuando reserva espacio para las
>variables locales, en teoria estoy definiendo un char * buffer[2]. Si mis
>calculos no fallan (y los de Aleph tampoco), se supone que deberia reservar
>8 bytes. De hecho en el ejemplo de Aleph : 

 Cierto, serían 2 punteros. Además, si te fijas en el código, "name"
lo tienes en ebp-8 (=name[0]), y name[1] en ebp-4. Es decir, la pila
queda:
[name(0)] [name(1)] [ebp] [ret]

 Estoy un poco como tu. Yo diría que la diferencia entre tu salida gdb
(que coincide con la mia) y el articulo de Aleph1 está en el modo de
compilado / versión del compilador. Seguramente Aleph usó un gcc más
viejo, con menos optimizaciones y/o i386 puro, en vez de i686 (como es
mi caso) y las versiones actuales de gcc. Por ejemplo, lo de reservar
24 bytes al ppio en vez de 8 bytes (que es lo estrictamente necesario)
es posible que sea pq más adelante va a necesitar esta memoria y el
compilador estima que es más optimo reservarlo todo de una tacada
aqui. Es mi hipótesis. Postea Hack-Argo, y que lo confirmen ;-)

 Si te fijas, lo que no cambia es la posicion relativa de las
variables locales resp a ebp. Con eso nos vale en ppio.

>Mi ordenador es un PIII 650 Mhz, un i586 corriendo una Mdk 7.0
>Es debido a eso?

 Yo lo probaría en i386, a ver qué resultado consigues (y me mandas
los resultados ;-)).

>Otra línea que tampoco entiendo es la siguiente:
>0x80481c8 <main+20>:    add    $0xfffffffc,%esp
>Hace apuntar el SP al comienzo del buffer? Xq?

 Esto tampoco lo veo, sorry. ¿De donde sacas que es comienzo del
buffer? Ese valor sería -4, no? (complemento a 2). Si le restas 4 a
esp no llegas a comienzo de "name", hasta lo que yo veo. Lo mismo
estoy equivocado...

>Tambien me gustaria saber donde puedo encontrar una tabla con el número de
>bytes q ocupa cada instruccion, (para poder calcular los saltos).

 No soy experto en asm :-(. Pero yo me iría a www.intel.com.

>Me gustaria mucho que me echases una mano, puesto que me interesa mucho el
>tema. 

 Lo dicho, comenta el problema en la lista, a ver que dicen. Yo
tampoco controlo demasiado de asm... Salu2.

 Salu2,
 --Roman




More information about the hacking mailing list