Dlaczego podczas uruchamiania kodu z gdb otrzymuję te same adresy dla zadeklarowanych zmiennych, ale podczas wykonywania binarnego nie mam tych samych adresów.Dlaczego adres zmiennej lokalnej zmienia się podczas wykonywania wiele razy, ale nie podczas debugowania go za pomocą 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));
}
Uruchomiłem program przez gdb i nigdy 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
$
Ale normalna realizacja programu zawsze daje SEGFAULT.
$ ./a.out
Segmentation fault
ja nie wiem, czy to pytanie jest duplikatem Is this always the address for GDB debug program?
UWAGA: Nie wyłączony ASLR
Świetna odpowiedź, dziękuję –