Duda con desensamblado

Iniciado por eLank0, 29 Mayo 2008, 11:40 AM

0 Miembros y 1 Visitante están viendo este tema.

eLank0

Hola, estaba siguiendo el texto: Smashing the stack for fun and profit y tengo una dudilla.

El texto nos pone el siguiente 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:


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:


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  :)

Ragnarok

¿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
No olvidéis leer las normas generales, además de las específicas de cada tablón.sgae, ladrones