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
ईएलएफ मेटाडेटा की जांच शुरू करने के लिए था , लेकिन कार्यान्वयन में एक बग के कारण यह वास्तव में चीजों को तोड़ दिया और जीसीसी पाई के निष्पादनयोग्य के रूप में दिखाया shared objects
।
मैंने file
बग सहित स्रोत कोड की व्याख्या की है , और ईएलएफ प्रारूप के बाइट्स जो इसे विस्तृत रूप में विस्तृत रूप से जांचते हैं: https://stackoverflow.com/questions/34519521/why-does-gcc.acreate-a-soded-object -instead के- एक-निष्पादन-द्विआधारी-अनुसार करने / 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
हालांकि यह सबसे व्यावहारिक समाधान नहीं है और संभव नहीं है यदि आप निष्पादन योग्य पर भरोसा नहीं करते हैं, तो यह मजेदार है और यह अंतिम जांच करता है कि हम वास्तव में किसके बारे में परवाह करते हैं, अगर लिनक्स कर्नेल / डायनेमिक लोडर निष्पादन योग्य स्थान को बदलता है या नहीं।