В аббревиатуре (или инициализм ): ASLR - рандомизация размещения адресного пространства.
Википедия о ASLR говорит:
ASLR случайным образом упорядочивает позиции адресного пространства ключевых областей данных процесса, включая базу исполняемого файла и позиции стека, кучи и библиотек.
Это описывает то, что вы видите.Впоследствии вы обнаружили, что использование:
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
для выключения ASLR означало, что адреса одинаковы при выполнении, либо с -fPIC
, либо без него, подтверждая тем самым, что ASLR был причиной изменения адреса.
Обратите внимание, что при печати вашего адреса, вероятно, должны использоваться аргументы формата %p
и void *
(хотя вы можете потенциально усечь преобразование данных, когда применяете приведение (int)
к адресам - но формат является правильным дляиспользуйте %d
).Модификатор типа t
предназначен для ptrdiff_t
, разница между двумя указателями.
#include <stdio.h>
int var1 = 94;
int var2 = 76;
int main(void)
{
void *var1Loc = &var1;
void *var2Loc = &var2;
printf("var1 address is: %p\n", var1Loc);
printf("var2 address is: %p\n", var2Loc);
printf("diff is: %td\n", &var2 - &var1);
return 0;
}