当linuxexecve()
有一个ELF时,它会将该ELF映射到进程的内存空间中,并从入口点开始运行代码。但是内核是如何决定ELF的加载地址和入口点的呢?
如果禁用 ASLR,它将查找.p_vaddr
每个 PT_LOAD 段并使用.e_entry
ELF 标头作为入口点。
但是如果启用 ASLR 会怎样呢?内核是否会简单地向上述所有内容添加随机移位,但保持它们的相对位置?
ELF的内容会影响内核的行为吗?就像 PT_LOAD 段的最小值.p_vaddr
是零还是非零?比如.e_type
ELF header是ET_DYN还是ET_EXEC?
我特别谈论 x86_64。