В любой обычной многопользовательской операционной системе адреса в вашем процессе будут виртуальными.Это связано с тем, что в обычных многопользовательских операционных системах операционная система использует виртуальные адресные пространства для обеспечения независимости программ друг от друга.
Адресное пространство вашей программы частично устанавливается процессом, называемым загрузчиком., который загружает исходные данные и код вашей программы в память.Простой загрузчик запустит стек новой программы в фиксированном месте - он будет использовать одно и то же начальное местоположение каждый раз, когда загружает программу.Затем, когда ваша программа запускается, a
всегда будет по одному адресу.Загрузчики работали таким образом в течение многих лет.
Поскольку злоумышленники иногда могут использовать известные адреса стеков для атаки и подрыва программного обеспечения, некоторые загрузчики теперь используют случайные адреса при загрузке программ.Это называется рандомизацией размещения адресного пространства (ASLR).Когда ваша программа загружается с загрузчиком, использующим ASLR, адрес a
будет изменяться от запуска к запуску.