Почему адрес локальной переменной изменяется при многократном выполнении, но не при отладке с помощью GDB?

Почему при запуске кода из gdb я получаю те же адреса для объявленных переменных, но пока просто выполняя двоичный файл, я получаю разные адреса.

#include
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));
}

Я запустил программу через gdb, и она никогда не срабатывала.

$ 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  
$

Но нормальное выполнение программы всегда приводит к SEGFAULT.

$ ./a.out   
Segmentation fault

Я не знаю, дублирует ли этот вопрос Всегда ли это адрес для программы отладки GDB?

ПРИМЕЧАНИЕ: Я не отключал ASLR

6
задан Community 23 May 2017 в 11:44
поделиться