Wie legt Linux die Ladeadresse und den Einstiegspunkt beim Ausführen eines ELF fest?

Wie legt Linux die Ladeadresse und den Einstiegspunkt beim Ausführen eines ELF fest?

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_vaddrin jedem PT_LOAD-Segment und verwendet .e_entryden 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_vaddrdes PT_LOAD-Segments null oder ungleich null ist? Zum Beispiel, wenn der .e_typeELF-Header ET_DYN oder ET_EXEC ist?

Ich spreche insbesondere von x86_64.

verwandte Informationen