मैं कुछ वांछित व्यवहार के लिए कुछ एप्लिकेशन में एक डाइलीब इंजेक्शन दे रहा हूं।ओएसएक्स पर सी ++ तरीके हुकिंग?
मैं फ्लैट सी एपीआई को ठीक से हुक करने में सक्षम हूं। एक बार जब मैं dylib इंजेक्ट करता हूं, तो मैं प्रतीक तालिका में देखता हूं और अपने फ़ंक्शन पते के साथ अपनी प्रविष्टि अपडेट करता हूं और बदले में मूल को कॉल करता हूं।
इस प्रकार, प्रतीक नाम मेरे लिए महत्वपूर्ण हो जाते हैं।
मेरी समस्या सी ++ नाम मैंगलिंग के साथ है। हम एक सी ++ फ़ंक्शन को कैसे लगा सकते हैं जिसका नाम उलझा हुआ है। मैंने स्टैक ओवरफ़्लो पर कुछ स्थानों को पढ़ा है, यह mach_override के साथ C++ कोड को हुक करना संभव है, लेकिन कोई उदाहरण या संदर्भ नहीं है।
क्या कुछ मुझे उदाहरण दे सकते हैं कि सी ++ की हुकिंग कैसे प्राप्त करें?
संपादित करें: मैं एक उदाहरण के रूप में $ c++filt -n _ZN10WindowData12GetCGContextEv
का इस्तेमाल किया और मिल बाहर के रूप में WindowData::GetCGContext()
- WindowData कक्षा या नाम स्थान है डाल?
- मैं इसे कैसे हुक सकता हूं? मुझे हुकिंग के लिए विंडोडाटा :: GetCGContext() का उपयोग करने के लिए कुछ आगे की घोषणाओं और बहिष्कारों की आवश्यकता है।
इस तरह कुछ ...
typedef void* (*WindowData_GetCGContextProcPtr)(void* inObj);
static WindowData_GetCGContextProcPtr gWindowDataGetCGContextProcPtr = NULL;
void* try_WindowDataGetCGContextProcPtr(void* inObj)
{
printf("try_WindowDataGetCGContextProcPtr \n");
return gWindowDataGetCGContextProcPtr(inObj);
}
अब, मैं इस विधि पैच करने के लिए चाहते हैं।
gWindowDataGetCGContextProcPtr = (WindowData_GetCGContextProcPtr)Patch((const void*)&WindowData::GetCGContext, (const void*)&try_WindowDataGetCGContextProcPtr);
यह पैच संकलन त्रुटि देता है।
error: 'WindowData' has not been declared
error: 'GetCGContext' was not declared in this scope
मैं इसे कैसे ठीक करता हूं?
धन्यवाद, मैं विधि नाम को उलझाने में सक्षम था। – MacGeek