Estimado, fijaos que no es lo mismo ejecutar el programa llamando una ruta absoluta
que una ruta relativa, por qué te preguntarás si el resultado es el mismo ???, porque en
argv[0] se almacena ésta información, por lo tanto si haces ./programa AAAA+Shellcode+jmp
no es lo mismo que ejecutar en la consola /home/user/Desktop/programas/programa AAAA+Shellcode+jmp,
te das cuenta que argv[0] en el segundo caso es más largo ya que debe almacenar la ruta absoluta??, eso qué implica ?? que en el segundo ejemplo te machacas mas bytes de la pila que en el primero .... lo más seguro que en tu caso para ejecutar lo haces en ruta relativa pero GDB lo hace con ruta absoluta y esto te machaca varios bytes por ende las direcciones no calzan .
espero haber ayudado en algo, estaba buscando una entrada en SecurityBydefault que habla sobre esto pero no lo he encontrado, apenas lo encuentre edito el post.
EDIT : te dejo el enlace que habla al respecto http://www.securitybydefault.com/2014/05/reversing-y-direcciones-de-memoria.html
que una ruta relativa, por qué te preguntarás si el resultado es el mismo ???, porque en
argv[0] se almacena ésta información, por lo tanto si haces ./programa AAAA+Shellcode+jmp
no es lo mismo que ejecutar en la consola /home/user/Desktop/programas/programa AAAA+Shellcode+jmp,
te das cuenta que argv[0] en el segundo caso es más largo ya que debe almacenar la ruta absoluta??, eso qué implica ?? que en el segundo ejemplo te machacas mas bytes de la pila que en el primero .... lo más seguro que en tu caso para ejecutar lo haces en ruta relativa pero GDB lo hace con ruta absoluta y esto te machaca varios bytes por ende las direcciones no calzan .
espero haber ayudado en algo, estaba buscando una entrada en SecurityBydefault que habla sobre esto pero no lo he encontrado, apenas lo encuentre edito el post.
EDIT : te dejo el enlace que habla al respecto http://www.securitybydefault.com/2014/05/reversing-y-direcciones-de-memoria.html