आप यथोचित दूर पाने सिर्फ GetILAsByteArray
विधि से बाइट सरणी का उपयोग कर सकते हैं, लेकिन आप ' आपको स्वयं बाइट्स के पार्सिंग लिखने की आवश्यकता होगी (यदि आप तीसरे पक्ष की लाइब्रेरी पर भरोसा नहीं करना चाहते हैं)।
सरणी की संरचना यह है कि निर्देश के लिए ऑपरेशन के बाद निर्देशों की पहचान करने वाले एक या दो बाइट्स हैं (जो कुछ भी नहीं है, कुछ 4 बाइट टोकन या 8 बाइट नंबर)।
कोड प्राप्त करने के लिए, आप से OpCodes
संरचना (MSDN) देख सकते हैं। आप सभी क्षेत्रों से अधिक की गणना हैं, तो आप काफी आसानी से बाइट्स की पढ़ने के लिए एक लुकअप तालिका का निर्माण कर सकते हैं:
// Iterate over all byte codes to build lookup table
for fld in typeof<OpCodes>.GetFields() do
let code = fld.GetValue(null) :?> OpCode
printfn "%A (%d + %A)" code.Name code.Size code.OperandType
code.Value
संपत्ति आप eithre byte
या कोड का int16
मूल्य देता है। code.Size
संपत्ति आपको बताती है कि यह 1 या 2 बाइट कोड है और OperandType
संपत्ति निर्दिष्ट करती है कि कौन से तर्क कोड का पालन करते हैं (बाइट्स की संख्या और अर्थ explained on MSDN है)। मुझे याद नहीं है कि आपको टोकन जैसी चीजों को कैसे संसाधित करने की आवश्यकता है जो iee MethodInfo
का संदर्भ लेते हैं, लेकिन मुझे लगता है कि आप इसे समझ पाएंगे!
स्रोत
2012-02-12 23:43:03
जैसा कि जॉन जॉल्मर अपने उत्तर में सुझाव देते हैं, [मोनो सेसिल] (http://www.mono-project.com/Cecil) इसके लिए एक अच्छा विकल्प है। [यहां] (http://plaureano.blogspot.com/2011/05/introduction-to-il-rewriting-with-cecil.html) आईएल रीराइटिंग पर चर्चा करने वाला एक अच्छा ब्लॉग है जो सहायक हो सकता है। –