2011-09-24 10 views
6

मैं एक आभासी मशीन पर काम कर रहा हूं जिसे मैं सी के साथ इंटरफ़ेस करने में सक्षम होना चाहता हूं। दूसरी तरफ जाकर और सी कोड में वर्चुअल मशीन फ़ंक्शंस को उजागर करना काफी आसान है, जो मैं अपने सिर को लपेट नहीं सकता, वह सी को उजागर कर रहा है वर्चुअल मशीन के लिए काम करता है।मैं कस्टम वर्चुअल मशीन पर सी फ़ंक्शंस का पर्दाफाश कैसे कर सकता हूं?

मैं गतिशील इसलिए की तरह आभासी मशीन के साथ सी कार्यों रजिस्टर करने के लिए सक्षम होने के लिए करना चाहते हैं:

vm_register(printf); 

तब मेरे आभासी मशीन में, ढेर करने के लिए तर्क धक्का, और:

call printf 

समस्या यह है कि बिना किसी तर्क के कितने तर्क की आवश्यकता है, और किस प्रकार के, मुझे यकीन नहीं है कि फ़ंक्शन पॉइंटर्स का उपयोग किया जा सकता है।

क्या कोई सामान्य फ़ंक्शन पॉइंटर प्रकार है जिसका उपयोग इस स्थिति में किया जा सकता है? क्या कोई मुझे सही दिशा में चला सकता है?

+0

कस्टम वी.एम. दिलचस्प विचार कार्यों को उजागर करके, आप एक डीएलएल को बुला रहे हैं।/साझा ऑब्जेक्ट/साझा लाइब्रेरी फ़ंक्शन या "* .h" लाइब्रेरी से? – umlcat

उत्तर

5

सामान्य उत्तर यह है कि आपको इसे असेंबली का उपयोग करके स्वयं लागू करना होगा। Libc से लिंक करने के बाद, आपके पास उस फ़ंक्शन का पता है जिसे आप कॉल करना चाहते हैं, और आपको मैन्युअल रूप से फ़ंक्शन को पैरामीटर पास करना होगा (आपके वर्चुअल मशीन पर जो भी प्लेटफॉर्म चल रहा है, उसके कॉलिंग सम्मेलन का उपयोग करके)।

सौभाग्य से एक लाइब्रेरी है, libffi, जो वही है जो आप चाहते हैं। इसका उपयोग करना बहुत आसान है, इसके स्रोत में कुछ दस्तावेज और उदाहरण शामिल हैं। यदि आप यह देखना चाहते हैं कि यह कैसे काम करता है, तो आप इसके कोड को देख सकते हैं (उदा। calling a function using the unix calling convention)।

पैरामीटर प्रकारों के संबंध में, आपको आम तौर पर उपयोगकर्ता को उनके लिए उनका वर्णन करने देना पड़ता है और अंधेरे से इसे स्वीकार कर लेता है और उन्हें libffi (या हार्डवेयर के लिए यदि आप इसे libffi के बिना करते हैं) पर आगे भेजते हैं। एक और तरीका फ़ंक्शन कॉल करने के लिए सी हेडर फ़ाइल को पार्स करना होगा, जो कम त्रुटि प्रवण है - लेकिन किसी भी मामले में, वास्तव में कोई सुरक्षित तरीका नहीं है क्योंकि फ़ंक्शन के लिए बाइनरी कोड इसके इंटरफ़ेस का वर्णन नहीं करता है (printf और इसके साथ परिवर्तनीय पैरामीटर सूची और भी बहुत कुछ)।

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