tengo un script muy simple para practicar y pronto me surgen dudas :
Código
#include <string.h> #include <stdio.h> void func(char *arg) { char nombre[32]; } int main(int argc, char *argv[]) { func(argv[1]); return 0; }
y ejecutándolo con GDB para ver cuándo sobreescribo el EIP:
(gdb) run AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ
Starting program: /home/basuri/prueba AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ
Bienvenido a Linux Exploiting AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ
Program received signal SIGSEGV, Segmentation fault.
0x0000000000400643 in func ()
(gdb)
Según la práctica, debería obtener una respuesta del tipo:
0x4c4c4c4c in func ()
Y no entiendo por qué me devuelve ese valor de memoria o por qué es tan largo.
Estoy practicando en un Ubuntu 14.04 64 bit sobre un Mac OS X 64 bit.
Estaría muy agradecido si alguien me echa una mano.
Saludos a todos.