में कार्यक्षमता को इंजेक्ट करने का सबसे अच्छा तरीका बाइनरी एप्लिकेशन (3 डी पार्टी, बंद स्रोत) में कार्यक्षमता डालने का सबसे अच्छा तरीका क्या होगा।बाइनरी
लक्ष्य एप्लिकेशन ओएसएक्स पर है और ऐसा लगता है कि जीसीसी 3+ का उपयोग करके संकलित किया गया है। मैं बाइनरी में कार्यान्वित कार्यों की सूची देख सकता हूं और एक विशेष कार्य को डीबग और अलग कर दूंगा जिसे मैं दूरस्थ रूप से कॉल करना चाहता हूं।
विशेष रूप से, मैं इस फ़ंक्शन को कॉल करना चाहता हूं - चलो इसे zoomByFactor(x,y)
पर कॉल करें - जब मुझे जटिल HIDevice से कुछ डेटा प्राप्त होता है।
मैं बाइनरी फ़ाइल में निर्देशों को आसानी से संशोधित या इंजेक्ट कर सकता हूं (यानी पैचिंग को केवल रैम में होने की आवश्यकता नहीं है)।
आप इसे "अच्छी तरह से" करने के तरीके के रूप में क्या सलाह देंगे?
संपादित करें:
मैं वास्तव में पूरा आवेदन करने की आवश्यकता है। तो मैं इसे कुचलने और पुस्तकालय का उपयोग नहीं कर सकता। (उन लोगों के लिए जिन्हें नैतिक स्पष्टीकरण की आवश्यकता है: यह सीएडी सॉफ़्टवेयर का एक मालिकाना टुकड़ा है, जिसकी कंपनी वेबसाइट 2006 से अपडेट नहीं की गई है। मैंने इस उत्पाद के लिए भुगतान किया है (वास्तव में इसके लिए बहुत पैसा है, वास्तव में) और परियोजना है डेटा जो मैं आसानी से इससे दूर नहीं जा सकता। उत्पाद मुझे ठीक तरह से ठीक करता है, लेकिन मैं हाल ही में एक नया छिपाई का उपयोग करना चाहता हूं। मैंने एप्लिकेशन के आंतरिक जांच की है, और मैं काफी आत्मविश्वास में हूं कि मैं प्रासंगिक डेटा के साथ सही कार्य को कॉल कर सकता हूं और इसे ठीक से काम करने के लिए प्राप्त कर सकता हूं)।
यहां मैंने जो किया है, और यह काफी अच्छा है।
मैं पहले से ही इस प्रक्रिया के माध्यम आवेदन के कुछ हिस्सों संशोधित कर लिया है:
xxd -g 0 binary > binary.hex cat binary.hex | awk 'substitute work' > modified.hex xxd -r modified.hex > newbinary chmod 777 newbinary
मैं हुप्स के माध्यम से कूद क्योंकि द्विआधारी लगभग 100 megs बड़ी है इस तरह का कर रहा हूँ।
जो मैं सोच रहा हूं उसका जस्ट यह है कि मैं मुख्य एप्लिकेशन लूप में कहीं भी jmp, एक थ्रेड लॉन्च करता हूं, और मुख्य फ़ंक्शन पर वापस आ जाता हूं।
अब, प्रश्न हैं: मैं नया कोड कहां डाल सकता हूं? क्या मुझे प्रतीक तालिकाओं को संशोधित करने की आवश्यकता है? वैकल्पिक रूप से, मैं स्वचालित रूप से एक डाइलीब लोड कैसे बना सकता हूं ताकि केवल "हैकिंग" मुझे सामान्य फ़ंक्शन में सामान्य रूप से लोड किए गए डाइलिब पर कॉल डालने की आवश्यकता हो?
आप अर्थ रहे हैं कि मैं इतना है कि मैं TextInput सिस्टम के इंजेक्शन तरीकों freeload कर सकते हैं एक इनपुट प्रबंधक होने का नाटक करना चाहिए? प्रोग्राम कोको ऐप नहीं है, इसलिए मैं सोच रहा हूं कि मैं इनपुट इनपुटर भी लोड कर पाऊंगा। –
यही मेरा मतलब था। हालांकि यदि कार्यक्रम कोको ऐप नहीं है, तो आप सही हैं कि आप इस तरह हुक नहीं डाल सकते हैं। ओह अच्छा। – DGentry