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_vaddr
segmento PT_LOAD e utiliza .e_entry
o 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_vaddr
segmento PT_LOAD fosse zero ou diferente de zero? Como o .e_type
cabeçalho ELF é ET_DYN ou ET_EXEC?
Estou falando de x86_64, especialmente.