Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: eLank0 en 29 Mayo 2008, 11:40 am



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