Linux execve()
에 ELF가 있으면 해당 ELF를 프로세스의 메모리 공간에 매핑하고 진입점부터 코드를 실행합니다. 하지만 커널은 ELF의 로드 주소와 진입점을 어떻게 결정합니까?
.p_vaddr
ASLR이 비활성화된 경우 각 PT_LOAD 세그먼트 를 찾고 .e_entry
ELF 헤더를 진입점으로 사용합니다.
하지만 ASLR이 활성화되면 어떻게 될까요? 커널은 단순히 위의 모든 항목에 무작위 이동을 추가하지만 상대 위치는 유지합니까?
ELF의 내용이 커널 동작에 영향을 줍니까? PT_LOAD 세그먼트의 최소값이 .p_vaddr
0이거나 0이 아닌 것처럼요? 예를 들어, .e_type
ELF 헤더는 ET_DYN입니까 아니면 ET_EXEC입니까?
저는 구체적으로 x86_64에 대해 이야기하고 있습니다.