से प्रोग्राम चलाएं मेरे पास बाइट सरणी में एक प्रोग्राम संग्रहीत है।बाइट सरणी
क्या इसे सी # के अंदर चलाने के लिए संभव है?
से प्रोग्राम चलाएं मेरे पास बाइट सरणी में एक प्रोग्राम संग्रहीत है।बाइट सरणी
क्या इसे सी # के अंदर चलाने के लिए संभव है?
निश्चित रूप से।
.exe
फ़ाइल में सहेजें।Process
कक्षा का उपयोग करें।नोट: इस संभालने है कि आपके बाइट सरणी निष्पादन योग्य कोड, और नहीं स्रोत कोड है। यह भी मानता है कि आपके पास एक वैध पीई हेडर है या आप इसे कैसे बनाना चाहते हैं।
आप वर्चुअल मशीन बना सकते हैं और कोड निष्पादित कर सकते हैं या आप एक गतिशील असेंबली बनाने के लिए प्रतिबिंब और गतिशील प्रकारों का उपयोग कर सकते हैं। आप गतिशील रूप से असेंबली लोड कर सकते हैं।
http://msdn.microsoft.com/en-us/library/system.reflection.assembly.load.aspx
आप इस प्रकार संभवतः यह उस के साथ कुछ कर सकते हैं। अगर मेरी याददाश्त मेरी सेवा करती है हालांकि कुछ सीमाएं हैं।
देखें
प्रतिबिंब Assembly.Load आवेदन डोमेन
हां। This answer दिखाता है कि आप सीधे बाइट सरणी की सामग्री निष्पादित कर सकते हैं। असल में, आप ज्ञात पते (IntPtr
) के साथ ढेर पर निष्पादन योग्य क्षेत्र आवंटित करने के लिए VirtualAlloc
का उपयोग करते हैं। फिर आप अपने बाइट सरणी को Marshal.Copy
के साथ उस पते पर कॉपी करें। आप पॉइंटर को GetDelegateForFunctionPointer
के साथ एक प्रतिनिधि को परिवर्तित करते हैं, और अंत में इसे सामान्य प्रतिनिधि के रूप में कॉल करते हैं। यदि typeToExecute अपने बुला कार्यक्रम के लिए जाना जाता एक अंतरफलक को लागू करता है, तो आप इसे इस इंटरफेस के लिए डाली और आह्वान कर सकते हैं, अब
Assembly assembly = AppDomain.Load(yourByteArray)
Type typeToExecute = assembly.GetType("ClassName");
Object instance = Activator.CreateInstance(typeToExecute);
:
बाइट सरणी मान लिया जाये कि एक .net विधानसभा (.exe या .dll) शामिल हैं इस पर विधि: बाइट सरणी एक EntryPoint
(मुख्य विधि) के साथ एक नेट विधानसभा है
((MyInterface)instance).methodToInvoke();
अगर तुम सिर्फ ऐसा कर सकता है। अधिकांश समय returnValue
null
होगा। और यदि आप कमांड लाइन तर्क प्रदान करना चाहते हैं तो आप उन्हें नीचे सूचीबद्ध commandArgs
स्ट्रिंग में डाल सकते हैं।
var assembly = Assembly.Load(assemblyBuffer);
var entryPoint = assembly.EntryPoint;
var commandArgs = new string[0];
var returnValue = entryPoint.Invoke(null, new object[] { commandArgs });
किस प्रकार का कार्यक्रम? –
आइए कहें कि मेरे पास एक सरल प्रोग्राम है जो बाइट सरणी – DanSpd
के अंदर संग्रहीत टेक्स्ट "हैलो" दिखाता है उस सरणी की सामग्री क्या है? स्रोत कोड, निष्पादन योग्य कोड? – Ikke