2009-09-30 22 views
32

तो एक .exe फ़ाइल एक फ़ाइल है जिसे विंडोज़ द्वारा निष्पादित किया जा सकता है, लेकिन इसमें वास्तव में क्या शामिल है? असेंबली भाषा प्रोसेसर विशिष्ट है? या किसी प्रकार का इंटरमीडिएट स्टेटमेंट जो विंडोज़ द्वारा पहचाना जाता है जो इसे एक विशिष्ट प्रोसेसर के लिए असेंबली में बदल देता है? खिड़कियां फ़ाइल के साथ क्या करती है जब यह "निष्पादित" होती है?एक .exe फ़ाइल में क्या है?

उत्तर

39

एमएसडीएन का एक लेख "An In-Depth Look into the Win32 Portable Executable File Format" है जो निष्पादन योग्य फ़ाइल की संरचना का वर्णन करता है।

असल में, एक .exe में डेटा के कई ब्लॉब्स और निर्देश हैं कि उन्हें स्मृति में कैसे लोड किया जाना चाहिए। इनमें से कुछ अनुभागों में मशीन कोड शामिल होता है जिसे निष्पादित किया जा सकता है (अन्य अनुभागों में प्रोग्राम डेटा, संसाधन, स्थानांतरण जानकारी, आयात जानकारी इत्यादि शामिल हैं)

मेरा सुझाव है कि आपको Windows Internals की एक प्रति प्राप्त होने के पूर्ण विवरण के लिए एक प्रति प्राप्त करें जब आप एक exe चलाते हैं।

मूल निष्पादन योग्य के लिए, मशीन कोड प्लेटफार्म विशिष्ट है। .exe का हेडर इंगित करता है कि .exe किस प्लेटफ़ॉर्म के लिए है।

जब एक देशी .exe निम्न होता है (निहायत सरलीकृत) चल रहा:

  • एक प्रक्रिया वस्तु बन जाता है।
  • exe ​​फ़ाइल उस प्रक्रिया की स्मृति में पढ़ी जाती है। .exe (कोड, डेटा इत्यादि) के विभिन्न वर्ग अलग-अलग मैप किए जाते हैं और विभिन्न अनुमतियां दी जाती हैं (कोड निष्पादित होता है, डेटा पढ़ा/लिखता है, स्थिरांक केवल पढ़ने के लिए होते हैं)।
  • .exe में स्थानान्तरण होते हैं (पते को .exe को अपने पसंदीदा पते पर लोड नहीं किया गया था।)
  • आयात तालिका चलती है और निर्भर डीएलएल लोड हो जाती है।
  • डीएलएल को .exe के समान तरीके से मैप किया गया है, जिसमें स्थानांतरित हो रहा है और उनके आश्रित डीएलएल लोड हो रहे हैं। डीएलएल से आयातित कार्यों को हल किया गया है।
  • प्रक्रिया एनटीडीएलएल में प्रारंभिक स्टब पर निष्पादन शुरू होती है।
  • प्रारंभिक लोडर स्टब प्रत्येक डीएलएल के लिए प्रवेश बिंदु चलाता है, और फिर .exe के प्रवेश बिंदु पर कूदता है।

प्रबंधित निष्पादकों में एमएसआईएल (माइक्रोसॉफ्ट इंटरमीडिएट भाषा) शामिल है और संकलित किया जा सकता है ताकि वे सीएलआर का समर्थन करने वाले किसी भी सीपीयू को लक्षित कर सकें। मैं सीएलआर लोडर की आंतरिक कार्यप्रणाली से परिचित नहीं हूं (सीएलआर बूट करने के लिए शुरू में मूल कोड कौन सा मूल कोड चलाता है और एमएसआईएल की व्याख्या करना शुरू करता है) - शायद कोई और उस पर विस्तार कर सकता है।

+0

अरे, मुझे इसे मारो! :) –

9

1 और 0 का!

This wikipedia link आपको Windows अनुप्रयोगों के लिए उपयोग किए जाने वाले पोर्टेबल निष्पादन योग्य प्रारूप पर आवश्यक सभी जानकारी देगा।

+0

जब तक मैंने देखा कि "यह" वास्तव में एक लिंक था, "1 और 0 के" के संदर्भ में नहीं, तब तक मैं आपको एक कमजोर उत्तर के लिए डाउनवोट करने वाला था। आशा है कि अगर आप इसे थोड़ा स्पष्ट बनाने के लिए इसे संपादित करते हैं तो आपको कोई फर्क नहीं पड़ता – paxdiablo

+5

मेरे दिन हमारे पास 1s नहीं था, हमें 0s –

12

मैं आपको बता सकता हूं कि .exe फ़ाइलों में पहले दो बाइट्स में 'MZ' क्या है। मेरा मतलब अक्षर 'एमजेड' है।

यह वास्तव में प्रतिनिधित्व करता है: मार्क ज़बिकोव्स्की। वह व्यक्ति जिसने exe फ़ाइल प्रारूप तैयार किया था।

http://en.wikipedia.org/wiki/Mark_Zbikowski

+4

के साथ करना था प्यारा और दिलचस्प (मैं निश्चित रूप से उस लिंक का अनुसरण करूँगा), लेकिन नहीं हाथ से सवाल के लिए बहुत प्रासंगिक है। – Twisol

+0

हां, एक दिलचस्प स्निपेट के दौरान, यह केवल पीई फ़ाइल के पहले दो बाइट्स को समझाता है। यह ज्यादा नहीं है, प्रतिशत-वार। – paxdiablo

+0

उत्सुकता से बाहर: क्या उसने इसे माइक्रोसॉफ्ट के लिए डिजाइन किया था? – MasterMastic

1

एक EXE फ़ाइल वास्तव में एक पोर्टेबल निष्पादन योग्य के रूप में जाना फ़ाइल का एक प्रकार है। इसमें बाइनरी डेटा होता है, जिसे प्रोसेसर द्वारा पढ़ा जा सकता है और निष्पादित किया जा सकता है (अनिवार्य रूप से x86 निर्देश।) हेडर डेटा और अन्य विविध सामग्री के लॉट भी हैं। वास्तविक निष्पादन योग्य कोड .text नामक अनुभाग में स्थित है, और इसे मशीन निर्देश (प्रोसेसर विशिष्ट) के रूप में संग्रहीत किया जाता है। यह कोड (साथ ही साथ .EXE के अन्य हिस्सों) को स्मृति में रखा गया है, और सीपीयू इसे भेजा जाता है, जहां यह निष्पादन शुरू होता है। (ध्यान दें कि वास्तव में बहुत अधिक इंटरफेस हो रहे हैं; यह एक सरल व्याख्या है)।

संबंधित मुद्दे