[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