linux在execve一個ELF時如何決定載入位址和入口點?

linux在execve一個ELF時如何決定載入位址和入口點?

當linuxexecve()有一個ELF時,它會將該ELF映射到進程的記憶體空間中,並從入口點開始運行程式碼。但是核心是如何決定ELF的載入位址和入口點的呢?

如果停用 ASLR,它將尋找.p_vaddr每個 PT_LOAD 段並使用.e_entryELF 標頭作為入口點。

但是如果啟用 ASLR 會怎麼樣呢?內核是否會簡單地向上述所有內容添加隨機移位,但保持它們的相對位置?

ELF的內容會影響內核的行為嗎?就像 PT_LOAD 段的最小值.p_vaddr是零還是非零?例如.e_typeELF header是ET_DYN還是ET_EXEC?

我特別談論的是 x86_64。

相關內容