¿Cómo decide Linux la dirección de carga y el punto de entrada cuando ejecuta un ELF?

¿Cómo decide Linux la dirección de carga y el punto de entrada cuando ejecuta un ELF?

Cuando Linux execve()tiene un ELF, asignará ese ELF al espacio de memoria del proceso y comenzará a ejecutar el código desde el punto de entrada. Pero, ¿cómo decide el núcleo la dirección de carga y el punto de entrada del ELF?

Si ASLR está deshabilitado, busca .p_vaddrcada segmento PT_LOAD y utiliza .e_entryel encabezado ELF como punto de entrada.

¿Pero qué pasa si ASLR está habilitado? ¿El núcleo simplemente agregará un desplazamiento aleatorio a todo lo anterior pero mantendrá su posición relativa?

¿El contenido de ELF afectará el comportamiento del kernel? ¿Como si el menor .p_vaddrdel segmento PT_LOAD fuera cero o distinto de cero? ¿Como si el .e_typeencabezado ELF fuera ET_DYN o ET_EXEC?

Me refiero especialmente a x86_64.

información relacionada