file
5.36 sagt es deutlich
file
5.36 gibt tatsächlich deutlich aus, ob es sich bei der ausführbaren Datei um PIE handelt oder nicht. Beispielsweise zeigt eine ausführbare PIE-Datei Folgendes:
main.out: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, not stripped
und eine Nicht-TORTE als:
main.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped
Die Funktion wurde in 5.33 eingeführt, aber es wurde nur eine einfache chmod +x
Überprüfung durchgeführt. Davor wurde es nur shared object
für PIE gedruckt .
In 5.34 sollte damit begonnen werden, die spezialisierteren DF_1_PIE
ELF-Metadaten zu überprüfen. Aufgrund eines Fehlers in der Implementierung wurden jedoch tatsächlich Fehler aufgetreten, und die ausführbaren Dateien von GCC PIE wurden als angezeigt shared objects
.
Ich habe den file
Quellcode einschließlich des Fehlers und genau die Bytes des ELF-Formats interpretiert , die es in qualvollen Details überprüft: https://stackoverflow.com/questions/34519521/why-does-gcc-create-a-shared-object statt einer ausführbaren Binärdatei gemäß / 55704865 # 55704865
Eine kurze Zusammenfassung des Verhaltens von Datei 5.36 lautet:
- ob
Elf32_Ehdr.e_type == ET_EXEC
- sonst wenn
Elf32_Ehdr.e_type == ET_DYN
- wenn ein
DT_FLAGS_1
dynamischer Abschnittseintrag vorhanden ist
- wenn
DF_1_PIE
eingestellt ist in DT_FLAGS_1
:
- sonst
- sonst
- Wenn die Datei von Benutzer, Gruppe oder anderen ausführbar ist
- sonst
GDB führt die ausführbare Datei zweimal aus und zeigt ASLR an
Eine sehr direkte Sache, die Sie tun können, ist, die ausführbare Datei zweimal über GDB auszuführen und zu prüfen, ob sich die Adresse aufgrund von ASLR zwischen den Ausführungen ändert.
Wie das geht, habe ich ausführlich erklärt unter: https://stackoverflow.com/questions/2463150/what-is-the-fpie-option-for-position-independent-executables-in-gcc-and-ld/51308031 # 51308031
Dies ist zwar nicht unbedingt die praktischste Lösung und nicht möglich, wenn Sie der ausführbaren Datei nicht vertrauen, aber es macht Spaß und führt die ultimative Überprüfung durch, die uns wirklich am Herzen liegt nicht.