ASLR就是其中之一。如果它被禁用怎么办?在发行版,内核版本中,堆栈的起始地址是否相同?
是否有不同的环境变量会更改堆栈中的对象地址?
答案 0 :(得分:1)
我不打算比较许多不同的内核版本,但在最新的开发内核(4.0)中,ELF二进制文件的加载器(load_elf_binary
中的fs/binfmt_elf.c
)初始化用户堆栈如果禁用ASLR,则依赖于体系结构的地址(由STACK_TOP
常量定义)。在某些体系结构中,STACK_TOP
是固定地址,但在许多体系结构中,它取决于当前进程的“个性”(或“执行域”)。
是的,环境变量和命令行参数在加载的程序运行之前被推送到用户堆栈,因此它们将影响用户堆栈指针,正如exec
之后的进程所见。