Como o Linux decide o endereço de carregamento e o ponto de entrada ao executar um ELF?

Como o Linux decide o endereço de carregamento e o ponto de entrada ao executar um ELF?

Quando o Linux execve()é um ELF, ele mapeia esse ELF no espaço de memória do processo e começa a executar o código a partir do ponto de entrada. Mas como o kernel decide o endereço de carregamento e o ponto de entrada do ELF?

Se o ASLR estiver desabilitado, ele consulta cada .p_vaddrsegmento PT_LOAD e utiliza .e_entryo cabeçalho ELF como ponto de entrada.

Mas e se o ASLR estiver ativado? O kernel simplesmente adicionará uma mudança aleatória a todos os itens acima, mas manterá sua posição relativa?

O conteúdo do ELF afetará o comportamento do kernel? Como se o menor .p_vaddrsegmento PT_LOAD fosse zero ou diferente de zero? Como o .e_typecabeçalho ELF é ET_DYN ou ET_EXEC?

Estou falando de x86_64, especialmente.

informação relacionada