當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。