मैं C # कंपाइलर द्वारा उत्पन्न MSIL / CIL को कैसे देख सकता हूँ? इसे विधानसभा क्यों कहा जाता है?


130

मैं .NET C # प्रोग्रामिंग के लिए नया हूँ। मैं कुछ पुस्तकों का अनुसरण कर रहा हूं। ऐसा कहा जाता है कि इसे सीधे बाइनरी कोड (मूल कोड) के संकलन के बजाय। उच्च स्तरीय कोड को मध्यवर्ती भाषा (MSIL उर्फ ​​CIL) कहा जाता है। लेकिन जब मैं संकलित करता हूं, तो मुझे एक exe / Dll फ़ाइल मिलती है।

  1. क्या यह MSIL / CIL इन exe / dll फ़ाइल में शामिल है?
  2. मैं उस मध्यवर्ती भाषा कोड को देखना चाहता हूं। बस इसके अस्तित्व को महसूस करना है। इसे कैसे देखें?
  3. वे इस exe / dll फ़ाइल को कॉल कर रहे हैं a assembly। क्या वे इस "फैंसी शब्द" का उपयोग केवल एक्स / डीएल फाइलों से अलग करने के लिए करते हैं जिसमें बाइनरी कोड (मूल कोड) होता है?

जवाबों:


95
  1. हाँ यह पीई फ़ाइल (पोर्टेबल निष्पादन योग्य = * .exe या *। Dll) के .textअनुभाग में अधिक सटीक है । अधिक जानकारी यहां पाई जा सकती है
  2. सबसे अच्छा विकल्प ILSpy का उपयोग करना है (रिफ्लेक्टर अब मुफ्त नहीं है)। यह एक नि: शुल्क डिस्सेम्बलर है जो आपकी विधानसभा को एमएसआईएल में भी सी #, वीबी (कुछ हद तक) में अलग कर सकता है। .NET फ्रेमवर्क SDK में ILDasm होता है, जो कि आधिकारिक MSIL असेंबलर है।
  3. मूल रूप से हाँ। असेंबली एक फ़ाइल है जिसमें MSIL कोड और संबंधित मेटाडेटा होती है। यह प्रति फ़ाइल PE फ़ाइलों तक सीमित नहीं है, लेकिन सभी वर्तमान CLR कार्यान्वयन उनका उपयोग करते हैं।

अगर मैं उस मामले पर भी एक अच्छी किताब की सिफारिश कर सकता हूं, तो यह सर्ज लिडिन के विशेषज्ञ .NET 2.0 आईएल असेंबलर है। वह लड़का है जिसने MSIL को डिज़ाइन किया है।


रुको! यह .textsextion में स्थित नहीं है ? यदि नहीं, तो क्या होता .textहै? और #मुझे लगा कि वर्गों के साथ शुरुआत करने का नाम है .। तो यह नहीं होना चाहिए.strings

मैं उत्सुक हूं, ILDasm की सिफारिश क्यों नहीं की गई है? क्या यह केवल (कुछ संस्करणों के साथ) दृश्य स्टूडियो में शामिल है?
सिंजई

2
दोनों के पास अपने स्थान हैं, लेकिन अधिकांश (> 99.99%) उपयोगकर्ताओं के लिए ILSpy सही विकल्प है। जल्दी से नेविगेट करने और रिवर्स-इंजीनियरिंग असेंबलियों के लिए आई # कोड को वापस C # ist अमूल्य करने के लिए इसकी क्षमता। यदि आप कुछ भी कर रहे हैं जो कच्चे आईएल का उत्सर्जन करता है (जैसे आप एक कंपाइलर या पुनर्लेखन विधानसभा IL लिख रहे हैं, जैसे Mono.Cecil के साथ) तो ILDasm काम में आता है क्योंकि यह आपको IL की कच्ची संरचना, टोकन टेबल आदि दिखा सकता है। , अधिकांश गैर-आईएल विशेषज्ञों को उन लोगों द्वारा भ्रमित किया जाएगा, इसलिए ILSpy शायद आप चाहते हैं और आवश्यकता है।
जोहान्स रुडोल्फ

3
वाह, 7 साल बाद तेजी से प्रतिक्रिया! मैंने IL के साथ कोई गड़बड़ नहीं की है, या सभी विकल्पों की तुलना की है (यही कारण है कि मैं पहली जगह में पूछ रहा हूं), लेकिन क्या LINQPad में यह विघटनकारी विशेषता नहीं है?
सिंजई

मैंने इसे वीएस 2017 में स्थापित किया, जब मैं आईएलएसपीवाई में कोड देखता हूं तो कुछ भी नहीं होता है।
अनिरुद्ध गुप्ता

46

आईएल को सी # के स्निपेट के लिए देखने के लिए मेरे पसंदीदा तरीकों में से एक फ्री लाइनक्यूपैड टूल का उपयोग करना है । कुछ कोड दर्ज करने और शीर्ष पर (या "सी # प्रोग्राम", जो भी सूट हो) "सी # स्टेटमेंट्स" चुनने के बाद, कोड एंट्री क्षेत्र के तहत "आईएल" बटन पर क्लिक करें, और आप उत्पन्न आईएल देखेंगे।

इस के लिए LINQPad का उपयोग करना है बहुत दृश्य स्टूडियो लोड या कमांड लाइन से संकलक चल रहा है, तो ILDASM लोड और एक पाठ संपादक के साथ .il फ़ाइल खोलने से अधिक सुविधाजनक।


एक और अच्छा उपकरण है रिफ्लेक्टर के लिए स्निपी ऐड-इन: jasonhaley.com/blog/post/2008/11/23/ReflectorSnippy-Addin.aspx
थॉमस लेवेस्क

अच्छा है! मैंने मतदान किया लेकिन अगर आपको किसी भी कस्टम वर्ग को शामिल करना है तो यह थोड़ा अधिक जटिल है। फिर भी, मुझे वास्तव में यह पसंद है!
एंड्रयू स्टीट्ज

28

यदि आप इसे ऑनलाइन चाहते हैं, तो .NET फिडेल उत्कृष्ट है। बस अपना कोड पेस्ट करें और View ILऊपर दाईं ओर स्थित विकल्प पर क्लिक करें ।


2
लगता है अब टूट जाएगा।
ल्यूक मौरर

@ नवाफल यहां भी टूट गया। मैं इसका इस्तेमाल करता था।
aloisdg codidact.com

हालांकि एक और ऑनलाइन समाधान है: sharplab.io । अधिक जानकारी के लिए इस उत्तर को जांचें: stackoverflow.com/a/51457583/1248177
aloisdg codidact.com

निश्चित नहीं है कि समस्या क्या है, मेरे लिए ठीक काम करता है .. @ aloisdgmovingtocodidact.com। कहा जाता है कि शार्पलैब। धीमी लगती है, इशारा करने के लिए धन्यवाद :)
nawfal

16

एक अन्य विकल्प: ReSharper का उपयोग करें

यहाँ छवि विवरण दर्ज करें स्रोत / IL सिंक किए गए दृश्य: बाईं नीली पृष्ठभूमि रेखा दाएं IL ब्लॉक के साथ मेल खाती है

विज़ुअल स्टूडियो में:

  • ReSharper चुनें | विंडोज | आईएल दर्शक
  • या प्रसंग मेनू: नेविगेट करें | आईएल कोड

स्रोत कोड और IL के समन्वित दृश्य का समर्थन करता है - जब आप स्रोत में एक वक्तव्य पर क्लिक करते हैं, तो IL में संबंधित ब्लॉक हाइलाइट किया जाता है (और इसके विपरीत)। ECMA मानक विनिर्देश से Microsoft डेवलपर नेटवर्क से IL और "सामान्य मध्यवर्ती भाषा (CIL) निर्देश सेट" के लिए विवरण प्रदर्शित करता है।

देखना इंटरफेरेट लैंग्वेज (IL) को रेस्परर हेल्प में देखना । ऊपर चित्र Resharper मदद से है।

नि: शुल्क विकल्प Jetbrains dotPeek का उपयोग करने के लिए है

यह भी देखें: "तलाश मध्यवर्ती भाषा (IL) ReSharper और dotPeek के साथ" मार्टेन Balliauw, 19 जनवरी, 2017 तक, - JetBrains ब्लॉग


गलती से आपका जवाब नहीं आया। इसे संपादित करें ताकि मैं
उत्थान

ReSharper में IL Viewer बढ़िया है। यदि आप IL सिंटैक्स पर माउस ले जाते हैं, तो यह वर्णनात्मक टूलटिप्स दिखाता है जो समझाता है कि प्रत्येक कीवर्ड क्या कर रहा है। IL के लिए नए लोगों के लिए बढ़िया है!
InvalidBrainException

12
  1. हां यह विधानसभा में है।
  2. आपको .NET रिफ्लेक्टर या ILDasm की आवश्यकता है ।
  3. विधानसभा की जाँच के बारे में अधिक जानकारी यहाँ

PS जैसा कि आप कुछ पुस्तकों का अनुसरण कर रहे हैं, मैं आपको C # के माध्यम से CLR की अत्यधिक अनुशंसा करूंगा ।


11

मेरा मानना ​​है कि उन्हें "असेंबली" कहा जाता है क्योंकि एक विधानसभा मॉड्यूल का एक सेट है, एक मैनिफ़ेस्ट द्वारा एक साथ इकट्ठा किया जाता है।

मल्टी-फाइल असेंबली
(स्रोत: microsoft.com )

देखें विधानसभा सामग्री जानकारी के लिए।


9

Sharplab शार्पलैब एक ऑनलाइन टूल है, जो साधारण उपयोग के मामलों के लिए बढ़िया है। अपना कोड बाईं ओर लिखें, दाईं ओर IL दिखाता है।


अब तक का सबसे अच्छा टूल +1
इमाद

7

कई मामलों में, .NET असेंबली जावा बाइटकोड पैकेज के समान हैं।

  1. हाँ। उनके पास मैनिफ़ेस्ट और अन्य डेटा भी होते हैं, लेकिन CIL exe / dll का हिस्सा है।
  2. ILDasm या परावर्तक का उपयोग करें - अधिकांश लोग रिफ्लेक्टर कहेंगे, क्योंकि यह बहुत अधिक शक्तिशाली है। दोनों आपको दिखाएंगे कि CIL का उत्पादन क्या था। बेहतर महसूस करने के लिए विकिपीडिया पर सभी CIL निर्देशों की एक सूची है (यह विधानसभा की तरह है)।
  3. मुझे लगता है कि यह कोड की एक विधानसभा के रूप में है। देशी से इसे अलग करने का एक अच्छा तरीका है।

7

मैंने अभी कुछ घंटे बिताए हैं जो सबसे अच्छा टूल खोज रहा है जो मुझे IL कोड को सीधे विजुअल स्टूडियो के अंदर देखने की अनुमति दे सकता है।

अभी तक मुझे जो एकमात्र समाधान मिला है वह है Msiler https://visualstudiogallery.msdn.microsoft.com/60fc53d4-e414-461b-a27c-3d5d2a53f637

यह काफी अच्छी तरह से काम करता है!

अन्यथा दूसरा सबसे अच्छा समाधान, लेकिन दृश्य स्टूडियो एकीकरण के बिना, JetBrains dotPeek है, जो ईमानदार होने के लिए काफी भयानक है।


5

मुझे पता है कि यह एक पुराना सवाल है, और मैं ऊपर दिए गए किसी भी उपकरण को पसंद करूंगा। हालांकि, एक चुटकी में, कम से कम संस्करण 2005 के बाद से विजुअल स्टूडियो के साथ बॉक्स में एक एमएसआईएल दर्शक रहा है।

उपकरण का नाम दिया गया है ildasm.exe, और डिफ़ॉल्ट Visual Studio स्थापनाओं के बाद निम्न फ़ोल्डर में स्थित है:

विजुअल स्टूडियो 2005 "C:\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\Bin\ildasm.exe"

विजुअल स्टूडियो 2008 " C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\ildasm.exe"

विजुअल स्टूडियो 2010 " C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\ildasm.exe"

अधिक जानकारी के लिए, देखें: MSDN लाइब्रेरी में " कैसे करें: असेंबली सामग्री देखें "।


2

मेरे अनुभव से आईएल-संबंधित ज्ञान का सबसे अच्छा स्रोत एंड्रयू ट्रॉल्सन "प्रो सी # और .NET प्लेटफ़ॉर्म" है। तीसरे संस्करण से शुरू करके वह वास्तव में उत्कृष्ट अध्याय (लगभग 50 पृष्ठ) है कि कैसे आईएल को समझें और यहां तक ​​कि अपना कोड भी लिखें और ILMsm का उपयोग करें। मैंने यह जानकारी जांचने के लिए नियोजित की है कि क्या .NET विश्व में एकाधिक वंशानुक्रम मौजूद है। इसके अलावा, आप IL में कुछ बहुत ही रोचक विशेषताओं को नियोजित करने की कोशिश कर सकते हैं (जैसे अपवादों को फ़िल्टर करना जो केवल VB में मौजूद हैं, लेकिन C # में नहीं)।

मैं उस अध्याय को पढ़ने की अत्यधिक सलाह देता हूं।

आखिरकार, .NET रिफ्लेक्टर असेंबलियों के आईएल कोड की जांच के लिए एक उद्यम मानक है और रिक्टर की पुस्तक निश्चित रूप से "पढ़ना चाहिए" सामान है। लेकिन ऊपर बताई गई अन्य पुस्तकों से आप वास्तव में उपयोगी चीजों को प्रकट कर सकते हैं :)

हाँ, .NET वर्ल्ड की प्रत्येक असेंबली में कुछ IL कोड (प्रकट के साथ) होते हैं, जिन्हें Reflector या ILDasm के माध्यम से देखा जा सकता है। इससे भी अधिक, परावर्तक आपको C # और VB अनुकूलित कोड दिखा सकता है। इसका मतलब यह है कि कोई भी व्यक्ति किसी असेंबली के सोर्स कोड को देख सकता है और इसीलिए कमर्शियल प्रॉडक्ट्स में ऑबफ्यूजर्स का इस्तेमाल किया जाता है।


2

मैं आपको मध्यवर्ती भाषा देखना चाहता हूं, तेलडिक से जस्टडेकम्पाइल डाउनलोड करने का प्रयास करें (जो वर्तमान में स्वतंत्र है, हालांकि इसके लिए संकेत की आवश्यकता है)।

अपने DLL में ड्रैग करें और ILसबसे ऊपर ड्रॉप डाउन बॉक्स से चुनें!


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.