file
5.36은 분명히 말한다
file
5.36은 실행 파일이 PIE인지 아닌지 실제로 실제로 인쇄합니다. 예를 들어 PIE 실행 파일은 다음과 같이 표시됩니다.
main.out: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, not stripped
PIE 이외의 것 :
main.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped
이 기능은 5.33에 도입되었지만 간단하게 chmod +x
확인했습니다. 그 전에는 shared object
PIE 용으로 인쇄 되었습니다.
5.34에서는 좀 더 전문화 된 DF_1_PIE
ELF 메타 데이터를 확인하기 시작 했지만 구현상의 버그로 인해 실제로 문제가 발생하여 GCC PIE 실행 파일을로 표시했습니다 shared objects
.
file
버그를 포함하여 소스 코드를 해석 했으며 정확한 ELF 형식의 바이트는 https://stackoverflow.com/questions/34519521/why-does-gcc-create-a-shared-object 에서 자세히 확인했습니다. 대신 실행 가능한 이진에 따라 / 55704865 # 55704865
파일 5.36 동작에 대한 요약은 다음과 같습니다.
- 만약
Elf32_Ehdr.e_type == ET_EXEC
- 그렇지 않으면
Elf32_Ehdr.e_type == ET_DYN
- 경우
DT_FLAGS_1
동적 부 엔트리가 존재
DF_1_PIE
에 설정된 경우 DT_FLAGS_1
:
- 그밖에
- 그밖에
- 사용자, 그룹 또는 다른 사람이 파일을 실행할 수있는 경우
- 그밖에
GDB는 실행 파일을 두 번 실행하고 ASLR을 참조하십시오.
가장 직접적인 방법은 GDB를 통해 실행 파일을 두 번 실행하고 ASLR로 인해 실행에서 주소가 변경되는지 확인하는 것입니다.
https://stackoverflow.com/questions/2463150/what-is-the-fpie-option-for-position-independent- executables- in-gcc- and-ld / 51308031 에서 자세한 방법을 설명했습니다. # 51308031
이것이 반드시 가장 실용적인 해결책은 아니며 실행 파일을 신뢰하지 않는 경우 가능하지는 않지만, 재미 있고 실제로 관심을 갖는 최종 점검을 수행합니다. 즉 Linux 커널 / 동적 로더가 실행 파일 위치를 변경하거나 아니.