2008-11-17 24 views
11

ठीक है ताकि शीर्षक थोड़ा सा बेकार हो लेकिन मैं कुछ भी बेहतर नहीं सोच सकता (शायद कोई और कर सकता है?)।"प्रतिबिंब मशीन" बनाने के लिए प्रतिबिंब का उपयोग कैसे करें

तो मेरे यहां एक विषय के आसपास कुछ प्रश्न हैं। मैं जो करना चाहता हूं वह एक ऐसा प्रोग्राम तैयार करता है जो ऑब्जेक्ट ले सकता है और इसके सभी गुणों, विधियों, कन्स्ट्रक्टर इत्यादि को सूचीबद्ध करने के लिए प्रतिबिंब का उपयोग कर सकता है। फिर मैं इन वस्तुओं को रनटाइम पर परीक्षण, डीबग और सटीक रूप से समझ सकता हूं कि मेरे कुछ वर्ग/प्रोग्राम चल रहे हैं, जबकि वे चल रहे हैं, (उनमें से कुछ विंडोज़ सेवाएं होंगी और शायद वीएस से डीबग चलाने के बजाए मशीन पर स्थापित होंगी)।

तो मैं इस कार्यक्रम के लिए एक हुक प्रदान करूंगा कि स्थानीय मशीन से (केवल) इस कार्यक्रम को मुख्य वस्तु का एक उदाहरण मिल सकता है और इसलिए इसमें चल रहे सभी उप ऑब्जेक्ट्स देख सकते हैं। (सुरक्षा के लिए कार्यक्रम को उस हुक का पर्दाफाश करने के लिए एक तर्क के साथ शुरू करने की आवश्यकता हो सकती है)।

"प्रतिबिंब मशीन" रनटाइम हेरफेर और पूछताछ के लिए अनुमति देगा।

क्या यह ध्वनि संभव है?

क्या कार्यक्रम को एक हुक प्रदान करना होगा या "प्रतिबिंब मशीन" एक EXE ले सकती है और (यदि यह सभी वर्गों का उपयोग कर रही थी), तो उपयोग करने के लिए एक ऑब्जेक्ट बनाएं?

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

संपादित करें: मुझे इसे स्वयं का प्रयास करना और विकसित करना अच्छा लगेगा, लेकिन मेरे पास पहले से ही उन परियोजनाओं की एक लंबी सूची है जो मैं करना चाहता हूं और पहले ही शुरू कर चुका हूं। जब से चुनने के लिए पहले से ही एक महान चयन है तो पहिया को फिर से शुरू करें।

+0

मुझे नहीं पता कि यह प्रश्न क्यों कम किया गया था। यह एक दिलचस्प विचार की तरह लगता है। ऊपर मतदान किया। –

उत्तर

5

Crack.NET पर देखने का प्रयास करें। इसका उपयोग डब्ल्यूपीएफ/विनफॉर्म पर रनटाइम हेरफेर और पूछताछ करने के लिए किया जाता है लेकिन स्रोत उपलब्ध है और यह अच्छी शुरुआत हो सकती है अगर यह आपकी आवश्यकताओं को पूरा नहीं करती है।

+0

मुझे क्रैक.Net पसंद है, यह दुष्ट दिखता है। इसका उपयोग एक कार्य वातावरण में किया जाएगा और हमारे पास मशीनों पर 3.5 नहीं है और न ही हमारे पास लोहे का पत्थर है, (वे अतिरिक्त बिट्स डालने के प्रशंसकों नहीं हैं जब उन्हें नहीं करना चाहिए)। – Jon

1

पावरहेल वास्तव में लगभग सभी करता है, अगर मैं सही ढंग से समझता हूं कि आप क्या कह रहे हैं।

+0

पावरहेल दिलचस्प और अन्वेषण के लायक दिखता है। – Jon

3

ऐसा लगता है जैसे कॉर्नेलियू तुसने के Hawkeye आप वस्तुओं/गुणों/आदि के रनटाइम पूछताछ के लिए देख रहे हैं। वह इसे .NET रनटाइम ऑब्जेक्ट एडिटर कहते हैं। मुझे यकीन नहीं है कि ऊपर से लिंक किया गया मुखपृष्ठ या CodePlex project प्रारंभ करने के लिए सबसे अच्छी जगह है।

यह पुराने हो चुके एक सा अब है, मुझे लगता है, लेकिन वहाँ एक earlier version of it on CodeProject जहां आप कैसे और क्या उसने किया के लिए स्रोत कोड देख सकते हैं।

+0

हॉकी बहुत अच्छा लग रहा है और आदर्श हो सकता है। – Jon

+0

कमांड लाइन ऐप्स पर हॉकी का उपयोग किया जा सकता है। मैंने इसके साथ त्वरित रूप से जाना है और केवल विंडोज़ फॉर्म ऐप्स में हुक करने में सक्षम होना प्रतीत होता है। – Jon

+0

मैंने इसे बड़े पैमाने पर उपयोग नहीं किया है, लेकिन मुझे लगता है कि आप सही हैं कि यह कंसोल ऐप्स में शामिल नहीं हो सकता है। –

0

कैसे एक "reflection engine".

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

मेरा अनुमान है कि आप भी एक क्रम संकलक चाहता हूँ ताकि आप निर्माण instrumented/तब्दील निरीक्षण के तहत कार्यक्रम के वेरिएंट क्रम इच्छित डेटा एकत्र करने के लिए कर सकते हैं। आप पाएंगे कि ऐसी मशीनरी स्थिर विश्लेषण परिणाम प्रदान करती है जो आपको से कई मामलों में रनटाइम विश्लेषण करने से बचने देती हैं।