मुझे लगता है कि आपका भ्रम वास्तव में .maxstack
की गलतफहमी से उत्पन्न होता है। इसे बनाना एक आसान गलती है, क्योंकि ऐसा लगता है कि इसे निष्पादित करते समय त्रुटि उत्पन्न होगी। हैरानी की बात है कि, उस विशेष निर्देश में वास्तव में रनटाइम पर स्टैक आकार के साथ कुछ भी नहीं करता है, इसके बजाय, यह विशेष रूप से कोड सत्यापन के दौरान उपयोग किया जाता है।
विभाजन III से - धारा 1.7.4
नोट: Maxstack कार्यक्रम के विश्लेषण से संबंधित है, कार्यावधि में ढेर के आकार के लिए नहीं। यह स्टैक फ्रेम के बाइट्स में अधिकतम आकार निर्दिष्ट नहीं करता है, बल्कि उन वस्तुओं की संख्या जिन्हें विश्लेषण टूल द्वारा ट्रैक किया जाना चाहिए।
कोड अविश्वसनीय बन जाता है। वही खंड, नोट करता है कि किसी भी अनुरूप कार्यान्वयन को अमान्य अधिकतम स्टैक मान वाले किसी विधि का समर्थन करने की आवश्यकता नहीं है। हालांकि, यह नहीं कहता कि यह नहीं होना चाहिए, और स्पष्ट रूप से, रनटाइम कोड निष्पादित कर रहा है। तो अगर ऐसा कोई प्रभाव नहीं पड़ता है, तो इसे परेशान क्यों करें?
मानो या न मानो, डिफ़ॉल्ट द्वारा, .NET Framework रूप से संदिग्ध कोड चलाता है। यह वास्तव में मुश्किल था मुझे कैसे .NET 4.0 में सत्यापन को सक्षम करने के लिए यह पता लगाने की, लेकिन अगर आप कैस को चालू करते हैं, (.maxstack 1
साथ) अपने कार्यक्रम के साथ
बिना क्रिया के अपवाद चलना बंद हो जाएंगे: System.InvalidProgramException: आम भाषा रनटाइम एक अवैध प्रोग्राम का पता चला। मुख्य पर()
इसे ध्यान में रखते हुए, संदिग्ध कोड किसी भी वातावरण है कि पूर्ण विश्वास (आम तौर पर इंटरनेट से विधानसभाओं) नहीं है में नहीं चल सकता। यदि यह आपके लिए महत्वपूर्ण नहीं है, तो आप इसे एक अवैध मान दे सकते हैं, और यह वास्तव में कोई फर्क नहीं पड़ता। यदि कोड स्वयं अभी भी सही है, तो यह ठीक होगा; निश्चित रूप से यदि आईएल स्टैक के साथ वास्तव में कोई समस्या है, तो यह InvalidProgramException
फेंक देगा।
स्रोत
2012-05-16 05:57:02
यही वह है जो मैंने पहले सोचा था, लेकिन अगर मैं उपरोक्त प्रोग्राम में .maxstack सेट करता हूं तो प्रोग्राम अभी भी चलता है। प्रोग्राम के लिए यह 2 या उससे ऊपर होना चाहिए जो मैं देख सकता हूं। – w0051977
बस अनुमान लगा रहा है, लेकिन शायद आईएलएएसएम यह समझने के लिए पर्याप्त चालाक है कि 1 पर्याप्त नहीं होगा और सेटिंग को ओवरराइड करेगा। –
@ 500-आंतरिक सर्वर सर्वर, यह नहीं है। आईएलडीएएसएम के अनुसार, उत्सर्जित कोड में वास्तव में '.axaxack 1' होता है। और विनिर्देश के अनुसार, इस तरह का कोड अमान्य और अविश्वसनीय होना चाहिए। और PEVerify वास्तव में असेंबली के सत्यापन में विफल रहता है। लेकिन यह वैसे भी ठीक चलाता है। – svick