Если я не ошибаюсь, ASLR будет заставлять локальные переменные в компиляторах C иметь другой адрес каждый раз, когда я запускаю программу. Но когда я попробовал его в Turbo C ++ и Dev-CPP IDE, он просто вернул аналогичный адрес для локальных переменных. Код, который я пробовал:
#include <stdio.h>
#include <conio.h>
int main()
{
int x = 10;
int *ptr = &x;
printf("%d", ptr);
getch();
return 0;
}
Раньше я думал, что адреса локальных переменных одинаковы, потому что они размещены в той же области стека и, следовательно, в том же адресе памяти. Но когда я нашел здесь, в stackoverflow, тему об ASLR, это заставило меня сделать это. Думаю, это из-за компиляторов. Может ли кто-нибудь пролить свет на это?
Изменить:
Я использую Windows 7.
%d
для печати указателей.%d
только когда-либо подходит для печатиint
s. Вместо этого используйте%p
и явное приведение кvoid *
:printf("%p", (void *)ptr);
- person The Paramagnetic Croissant   schedule 04.08.2014%d
является неопределенным поведением. - person The Paramagnetic Croissant   schedule 04.08.2014