मैं वर्चुअल मशीन के लिए देशी कॉल बाइंडिंग पर काम कर रहा हूं, और सुविधाओं में से एक रनटाइम पर नाम से मानक libc फ़ंक्शंस को देखने में सक्षम होना है। विंडोज़ पर यह परेशानी का थोड़ा सा हो जाता है क्योंकि मुझे वर्तमान में प्रक्रिया में लोड किए गए msvcrt मॉड्यूल को एक हैंडल प्राप्त करने की आवश्यकता है। आम तौर पर यह msvcrt.dll है, लेकिन यह अन्य प्रकार भी हो सकता है (msvcr100.dll, आदि) और GetModuleHandle ("msvcrt") पर कॉल विफल हो सकता है यदि किसी भिन्न नाम वाले संस्करण का उपयोग किया जाता है।Win32 में func ptr से मॉड्यूल हैंडल कैसे प्राप्त करें?
मैं जो करने में सक्षम होना चाहता हूं वह एक रिवर्स लुकअप है, libc (जो मेरे पास बहुतायत में है) से फ़ंक्शन पॉइंटर लें और इसे प्रदान करने वाले मॉड्यूल पर एक हैंडल प्राप्त करें। असल में, कुछ इस तरह:
HANDLE hlibc = ReverseGetModuleHandle(fprintf); // Any func from libc should do the trick
void *vfunc = GetProcAddress(hlibc);
वहाँ Win32 एपीआई में ऐसी बात है, इस प्रक्रिया के हैंडल और प्रतीक तालिकाओं का एक पुस्तिका की पैदल दूरी में उतरते बिना है? इसके विपरीत, अगर मैं समस्या को अधिक सोच रहा हूं, तो Win32 पर नाम से libc फ़ंक्शन देखने का कोई आसान तरीका है?
यह वास्तव में कैसे मदद करता है? –
मुझे क्या याद आ रही है? –
यह एक कोड पते से मॉड्यूल हैंडल खोजने के लिए एक प्रसिद्ध शॉर्टकट है। मॉड्यूल 32-बिट और विंडोज़ के 64-बिट संस्करणों के विंडोज़ के 16-बिट संस्करणों से वापस दिनांक संभालता है, मॉड्यूल हैंडल बस स्मृति आवंटन का मूल पता है। मैंने कभी यह असफल नहीं देखा है और मेरे कोड में एक ही चाल का उपयोग किया है। –