2011-09-01 9 views
8

खैर इस सवाल अजीब लग सकता है लेकिन इसकी सरल - मेरी बात है अगर मैं एक "गोटो" (brtrue आदि) उदाहरणक्या मोनो। सेसिल शाखाओं आदि का ख्याल रखता है?

br IL_0003 
call ***** 
IL_0003: ret 

तरह decompiled कोड में और मैं के बाद कि * एक कमांड जोड़ने * कॉल को शीर्ष बिंदु पर ब्रांड्स को उस कोड को या उसके जैसा करना चाहिए।

सेसिल इसे स्वयं करता है या मुझे उन सभी शाखाओं का ख्याल रखना है? :/ उन्हें ठीक करने में बहुत मुश्किल नहीं होगी, लेकिन यदि सेसिल नहीं करता है तो मैं बस इस परियोजना को शुरू नहीं करूंगा, उन्नत आईएल जादू के लिए कोई समय (या ज्ञान) नहीं: पी

पीएस। खेद है कि अगर मैं उलझन में चीजें कर रहा हूं लेकिन .NET सामान में एक भिखारी हूं;/मैं हमेशा जावा या किसी भी वीएम टीबीएच के रूप में इसे रद्द कर देता हूं।

* (हाँ मुझे पता है यह IL_0003 होना नहीं होते इसकी सिर्फ उदाहरण के लिए) *

उत्तर

13

हाँ, सेसिल आप के लिए शाखा अद्यतन करेगा।

एकमात्र मामला आपको देखभाल करना है, वह मामला है जहां शाखा एक छोटी फार्म शाखा है। यदि आप बहुत अधिक निर्देश इंजेक्ट करते हैं, तो यह बह सकता है।

इसे संभालने का एक बहुत ही आसान तरीका है। कोड इंजेक्शन लगाने से पहले, बस विस्तार तरीकों Mono.Cecil.Rocks से SimplifyMacros कहते हैं, इस तरह:

method.Body.SimplifyMacros(); 

यह br में br.s हो जाएगा।

और जब आप कोड इंजेक्शन लगाने के काम हो गया, बस फोन:

method.Body.OptimizeMacros(); 

कौन सा विपरीत ऑपरेशन है, कि है, यह br.s में br चालू करने के लिए यदि संभव हो तो कोशिश करेंगे।

+0

वाह, इस तरह का एक तेज उत्तर और लेखक से :) धन्यवाद आदमी आप सबसे अच्छा: पी – n00b

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