ASLR расшифровывается как «рандомизация размещения адресного пространства».То, что он делает, это изменяет различные начальные адреса секций / сегментов при каждом запуске, и да, это включает в себя стек.
Это не ошибка;это по замыслу.Его цель, отчасти, состоит в том, чтобы затруднить получение доступа из-за переполнения буферов, поскольку для выполнения произвольного кода необходимо заставить процессор «возвращаться» к определенной точке в стеке или в библиотеках времени выполнения.Легитимный код знал бы, куда вернуться, но некоторые неубедительные эксплойты не будут - каждый раз это может быть другой адрес.
Что касается того, почему видимый размер стека изменяется, пространство стека выделяется на страницах, а небайт.Изменение указателя стека, особенно если он не кратен размеру страницы, изменяет объем доступного пространства.