2012-11-07 35 views
5

द्वारा प्रदान किए गए dlopen()/dlsym() का पता कैसे प्राप्त कर सकता हूं मुझे dlsym() और dlopen() syscalls के लिए हुक लागू करने की आवश्यकता है। हुक से मूल dlsym() को कॉल करने के लिए, मुझे इस syscall का पता प्राप्त करने की आवश्यकता है। मैं पुस्तकालय-कन्स्ट्रक्टर-फ़ंक्शन में पता पाने का प्रयास करता हूं। लेकिन मुझे केवल हुक फ़ंक्शन का पता मिल रहा है। मैंने RTLD_DEFAULT के रूप में एक हैंडलर के रूप में निर्दिष्ट करने की कोशिश की, साथ ही RTLD_NEXT। RTLD_DEFAULT का उपयोग करते समय, मुझे न्यूल मिलता है। RTLD_NEXT का उपयोग करते समय, मुझे हुक फ़ंक्शन का पता मिलता है। dlopen() मुझे उसी कारण से उपयोग नहीं किया जा सकता है, क्योंकि मेरे पास dlopen() पर हुक है।मैं ओएस

मुझे बताएं, कृपया, मैं मूल dlopen() और dlsym() फ़ंक्शंस का पता कैसे प्राप्त कर सकता हूं?

धन्यवाद।

+1

'RTLD_NEXT' बिल्कुल इस उद्देश्य के लिए डिज़ाइन किया गया है: प्रतीक की मूल बाध्यकारी प्राप्त करने के लिए। यदि आप इसे हुक लाइब्रेरी से कॉल करते हैं, तो आपको हुक फ़ंक्शन नहीं मिलना चाहिए, आपको सी लाइब्रेरी से फ़ंक्शन प्राप्त करना चाहिए। समस्या का प्रदर्शन करने वाला एक छोटा संकलन उदाहरण मदद करेगा। – user4815162342

+0

उदाहरण कोड यहां: http://liveworkspace.org/code/955dd416ce716b8a5682d121fe399490 – niXman

+0

आप जीएनयू/लिनक्स पर 'dladdr (3)' का उपयोग कर सकते हैं। –

उत्तर

3

__libc_dlsym()dlsym() है जो libc द्वारा प्रदान किया गया है। dlopen() का अपना समकक्ष __libc_dlopen() है।

+0

हल हो गया। धन्यवाद! – niXman