मैं रन-टाइम पर (LD_PRELOAD
) कैसे, विंडोज़ के लिए ला डिटोरस, लिनक्स पर fopen()
जैसे सी फंक्शन को रोक/हुक कर सकता हूं? मैं इसे पायथन से करना चाहता हूं (इसलिए, मुझे लगता है कि प्रोग्राम पहले से ही एक सीपीथन वीएम चला रहा है) और पाइथन कोड पर भी दोबारा शुरू कर रहा है। मैं साझा पुस्तकालय कार्यों को सिर्फ हुकिंग के साथ ठीक हूं। मैं प्रोग्राम चलाने के तरीके को बदलने के बिना भी ऐसा करना चाहता हूं।लिनक्स पर पाइथन से सी कार्यों को गतिशील रूप से कैसे इंटरैप करना है (एलडी_PRELOAD के बिना)?
एक विचार ptrace()
के आधार पर अपने खुद के उपकरण रोल करने के लिए, या dlsym()
साथ या PLT में पाया कोड को फिर से लिखने, और ctypes
-generated सी प्रतिदेय कार्यों को लक्षित पर है, लेकिन मैंने सोचा कि मैं यहाँ पहली बार पूछना चाहते हैं। धन्यवाद।
* एलडी_PRELOAD के साथ * आप इसे कैसे करेंगे? –
आपको अपने लिए निम्न-स्तरीय काम करने के लिए एक मूल मॉड्यूल लिखना होगा। यहां तक कि यदि आप पाइथन से पीएलटी तक पहुंचने और संशोधित करने का प्रबंधन करते हैं (जो शायद संभव है), तो आपको पायथन वीएम लॉन्च करने के लिए कोड की आवश्यकता होगी। –
@ मैट जॉइनर: जिस तरह से आप अपना प्रश्न पूछ रहे हैं, मैं इसे लेता हूं आपको कुछ ऐसा पसंद नहीं है, जिस स्थिति में यह उत्पादक/रचनात्मक होगा यदि आप अधिक विशिष्ट हो सकते हैं। लेकिन अगर आप वास्तव में सिर्फ पूछ रहे थे, तो इस तरह आप इंटरपॉजिशन को गतिशील रूप से कार्य करते हैं: http://stackoverflow.com/questions/426230/what-is-the-ld-preload-trick (और, हाँ, मैं ' मैंने इसे कई बार पहले लागू किया है) – Yang