¿Por qué cuando ejecuto código desde gdb, obtengo las mismas direcciones para las variables declaradas, pero al ejecutar el binario no obtengo las mismas direcciones?¿Por qué la dirección de una variable local varía cuando se ejecuta varias veces, pero no al depurarla con GDB?
#include<stdio.h>
void main()
{
int *x,q;
//I saw the address of the variable q in this program through gdb during the __1st__ execution.
//I re-compiled the program to make x to point to this address.
x=0x7fffffffe2bc;
*x=3;
printf("%d",(*x));
}
Ejecuto el programa a través de gdb y nunca segfaulted.
$ gdb -q ./a.out
Reading symbols from /home/eknath/needed2/a.out...done.
(gdb) r
Starting program: /home/eknath/needed2/a.out
3
Program exited normally.
(gdb) q
$
Pero la ejecución normal del programa siempre produce un SEGFAULT.
$ ./a.out
Segmentation fault
No sé si esta pregunta es un duplicado de Is this always the address for GDB debug program?
NOTA: No he apagado ASLR
Gran respuesta, gracias –