Título: Duda con desensamblado Publicado por: eLank0 en 29 Mayo 2008, 11:40 am Hola, estaba siguiendo el texto: Smashing the stack for fun and profit y tengo una dudilla.
El texto nos pone el siguiente código: Código: #include <stdio.h> int main() { char *name[2]; name[0] = "/bin/sh"; name[1] = NULL; execve(name[0], name, NULL); } Y teóricamente, al desensamblarlo con GDB, lo primero que observamos que nos llama la atención es el famoso procedure prelude: Código: push %ebp movl %esp, %ebp subl $0x8, %esp Y de este modo reservamos los 8 bytes para el puntero a carácter del programa. Pero en la práctica, no es así. Lo que a mí me muestra como procedure prelude es lo siguiente: Código: 0x08048212 <main+10>: push %ebp 0x08048213 <main+11>: mov %esp,%ebp 0x08048215 <main+13>: push %ecx 0x08048216 <main+14>: sub $0x24,%esp Y mis dudas son: ¿Por qué metemos el valor de ECX en la pila cuando aún no hemos tocado ese registro? ¿Podría afirmar que en mi SO (Ubuntu) los punteros son de 12 bytes en vez de 4? Gracias, Salu2 :) Título: Re: Duda con desensamblado Publicado por: Ragnarok en 30 Mayo 2008, 00:42 am ¿Tienes un SO de 96 bits? creía que sólo se hacían de 64...
Usa sizeof para ver el tamaño de los punteros. http://publications.gbdirect.co.uk/c_book/chapter5/sizeof_and_malloc.html |