哪些因素会影响 Linux 上的堆栈地址?

What factors affect the address of the stack on Linux?

ASLR 就是其中之一。如果禁用了怎么办?堆栈的起始地址在发行版、内核版本之间是否相同,什么?

不同的环境变量是否会改变堆栈中更上层对象的地址?

我不打算去比较许多不同的内核版本,但是在最新的开发内核 (4.0) 中,ELF 二进制文件的加载程序(fs/binfmt_elf.c 中的 load_elf_binary)初始化用户堆栈如果 ASLR 被禁用,则在依赖于体系结构的地址(由 STACK_TOP 常量定义)。在某些架构上,STACK_TOP 是固定地址,但在许多架构上,它取决于当前进程的 "personality"(或 "execution domain")。

是的,环境变量和命令行参数在加载程序 运行 之前被压入用户堆栈,因此它们将影响进程在 [=14] 之后看到的用户堆栈指针=].