Wenn Linux execve()
ein ELF verwendet, wird es dieses ELF in den Speicherbereich des Prozesses mmappen und Code vom Einstiegspunkt aus ausführen. Aber wie bestimmt der Kernel die Ladeadresse und den Einstiegspunkt des ELF?
Wenn ASLR deaktiviert ist, sucht es .p_vaddr
in jedem PT_LOAD-Segment und verwendet .e_entry
den ELF-Header als Einstiegspunkt.
Aber was ist, wenn ASLR aktiviert ist? Fügt der Kernel allen oben genannten Elementen einfach eine zufällige Verschiebung hinzu, behält aber ihre relative Position bei?
Beeinflusst der Inhalt von ELF das Verhalten des Kernels? Zum Beispiel, wenn der kleinste Wert .p_vaddr
des PT_LOAD-Segments null oder ungleich null ist? Zum Beispiel, wenn der .e_type
ELF-Header ET_DYN oder ET_EXEC ist?
Ich spreche insbesondere von x86_64.