2017-06-20 19 views
5

मान लीजिए कि मैंने संकलन के दौरान अपने प्रोग्राम में बाइनरी शामिल की है, इसलिए मैं इसे var myExec =[]byte{'s','o','m','e',' ','b','y','t','e','s'} पर एक चर में रखता हूं, इसलिए मेरा सवाल यह है कि मेरे प्रोग्राम में इस बाइनरी को डिस्क पर वापस लिखने के बिना निष्पादित करने का कोई तरीका है या नहीं और उस पर निष्पादन या कांटा बुलाओ? मैं गोलांग में अपना ऐप लिख रहा हूं, इसलिए जिस विधि को मैं खोज रहा हूं वह गो या सी (सीजीओ का उपयोग करके) का उपयोग करना है।मैं स्मृति से निष्पादन योग्य कैसे निष्पादित कर सकता हूं?

असल में, मैं बैश स्क्रिप्ट को बैश में पाइप करने की तरह कुछ मांग रहा हूं, मुझे नहीं पता कि मैं इसे चलाने के लिए मूल निष्पादन योग्य बाइट्स को पाइप कर सकता हूं और उसे डिस्क पर वापस लिख सकता हूं और फिर इसे फिर से पढ़ने के लिए ओएस ऐसा लगता है कि

+2

डिस्क पर संग्रहीत निष्पादन योग्य बाइनरी होने की स्थिति में आप कैसे पहुंचे? बस पूछना क्योंकि मुझे लगता है * मूल समस्या को हल करने का एक बेहतर तरीका हो सकता है ... –

+0

यह सिर्फ एक काल्पनिक मुद्दा है। मैं एक ऐसा ऐप बनाने की योजना बना रहा हूं जिसके लिए इस तरह की जानकारी की आवश्यकता होगी मूल रूप से मैं अपने ऐप के साथ कुछ टूल्स पैक कर सकता हूं और उन्हें डिस्क पर लिखने के बिना अपने ऐप के डैशबोर्ड से आवश्यकतानुसार चला सकता हूं और जब मैं नहीं कर पाता हूं तो कोई अस्थायी फाइल नहीं होगी डिस्क पर सभी मेमोरी @FelixPalmen – nikoss

+0

मुझे नहीं लगता कि आपको यह करना चाहिए। जैसे लिनक्स सिस्टम पर, आप केवल एक पैकेज बनायेंगे जो इन उपकरणों को '$ (उपसर्ग)/lib/$ (पैकेज) /' या '$ (उपसर्ग)/libexec/$ (पैकेज) /' पर इंस्टॉल करता है। खिड़कियों पर, वे कहीं भी आपकी प्रोग्राम निर्देशिका के अंदर जाएंगे। –

उत्तर

1

सी में और लिनक्स मानते हुए, आप mprotect() सिस्टम कॉल के माध्यम से मेमोरी क्षेत्र की सुरक्षा को बदल सकते हैं, ताकि इसे निष्पादित किया जा सके (यानी: डेटा क्षेत्र चालू करेंकोड क्षेत्र) में। इसके बाद, आप पर मेमोरी के उस क्षेत्र को निष्पादित कर सकते हैं।

+0

यह केवल आसान हिस्सा है। एसएसओ फाइलों जैसे बाहरी घटकों के स्थानांतरण और लोडिंग के बारे में क्या? –

+0

कोड का एक छोटा टुकड़ा जोड़ना मुझे समझने के लिए बहुत अच्छा हो सकता है। मैं नीचे दिए गए मैन पेज से क्या समझता हूं https://ws1.sinaimg.cn/large/006tKfTcgy1fgrzfy90qtj31260qemyr.jpg मुझे पता लंबाई और prot_exec पास करने की आवश्यकता है, लेकिन मुझे अभी भी स्मृति पता प्राप्त करने के लिए एक समस्या है असुरक्षित पॉइंटर्स का उपयोग करने के लिए और इसे अपने आप से malloc का उपयोग करने के बाद से मैन्युअल रूप से पते से निपटने का कोई तरीका नहीं है और मान लीजिए कि मैंने वास्तव में बाइट्स को निष्पादित किया है कि आप कैसे चुन सकते हैं चुनौती है कि @neroku – nikoss

+0

@MichaelWalz यह वास्तव में एक मुद्दा नहीं है यदि आपकी बाइनरी शुद्ध जाने में लिखी गई है क्योंकि यह स्थिर रूप से जुड़ी हुई है, इसकी सभी जरूरतों को स्वयं ही – nikoss

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

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