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_vaddr
cada segmento PT_LOAD y utiliza .e_entry
el 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_vaddr
del segmento PT_LOAD fuera cero o distinto de cero? ¿Como si el .e_type
encabezado ELF fuera ET_DYN o ET_EXEC?
Me refiero especialmente a x86_64.