मैंने एक छोटी साझा लाइब्रेरी नहीं की है जो खुले, खुले 64, स्टेट और stat64 sys कॉल को अवरुद्ध करने का प्रयास करता है। जब मैं एलडी_PRELOAD निर्यात करता हूं और ओरेकल के एसक्लप्लस चलाता हूं, तो मैं खुले और खुले 64 कॉल के निशान देख सकता हूं, लेकिन स्टेट और स्टेट 64 कॉल का कोई निशान नहीं है। साझा लाइब्रेरी एक एकल सी फ़ाइल है जिसमें sys की सभी परिभाषाएं शामिल हैं। ऐसा क्यों होता है कि कुछ सिस्कोल को रोक दिया जाता है और अन्य नहीं करते हैं? आपकी सहायता के लिए धन्यवाद।सी और एलडी_PRELOAD। खुली और खुली 64 कॉल अवरुद्ध, लेकिन stat64
उत्तर
क्योंकि जीएनयू libc
लागू करता open()
और open64()
आपकी अपेक्षानुसार (अर्थात वे सिर्फ गतिशील रूप से जुड़े हुए प्रतीकों कि आप LD_PRELOAD
साथ में हुक कर सकते हैं कर रहे हैं), लेकिन कुछ stat()
और stat64()
के साथ विशेष है।
आप प्रतीकों libc
(जैसे nm -D /libc/libc.so.6
के साथ) द्वारा निर्यात को देखें, तो आप देखेंगे कि यह वास्तव में प्रतीकों stat
या stat64
प्रदान नहीं करता है! इन कार्यों के लिए
कॉल लिपटे रहे हैं - या तो संकलन समय पर (यदि संभव हो) इनलाइन कार्यों द्वारा <sys/stat.h>
में, या (कि नाकाम रहने) libc_nonshared.a
द्वारा प्रदान की स्थिर जुड़ा हुआ परिभाषाएँ।
वास्तविक गतिशील रूप से जुड़े फ़ंक्शंस जिन्हें __xstat()
या __xstat64()
कहा जाता है; और ये एक अतिरिक्त पहला तर्क लेते हैं, एक पूर्णांक, जो एक संस्करण संख्या है जो कॉलर द्वारा struct stat
के लेआउट को इंगित करता है। इसके बजाए इन्हें हुक करने का प्रयास करें। । अगर आप /usr/include/sys/stat.h
में देखने के लिए आप इस प्रभाव के लिए एक टिप्पणी मिल जाएगा fstat()
;
(यह सब की बात गतिशील रूप से जुड़े हुए libc
जो struct stat
के विभिन्न असंगत लेआउट और mode_t
में बिट्स की परिभाषाओं का उपयोग बाइनरी समर्थन करने के लिए अनुमति देने के लिए है , fstat64()
, lstat()
, lstat64()
और mknod()
भी इसी तरह से प्रभावित होते हैं।)
- 1. neo4j और अधिकतम खुली फ़ाइलें
- 2. सी # खुली फ़ाइल,% userprofile%
- 3. सार तरीकों और खुली बंद सिद्धांत
- 4. एक खुली HTTP स्ट्रीम
- 5. सी सभी खुली फ़ाइल डिस्क्रिप्टर
- 6. कनेक्शन मान्य होना चाहिए और खुली त्रुटि
- 7. ओएस एक्स टर्मिनल, एसएसएच, और बहुत सी खुली फाइलें
- 8. बहुत अधिक फ़ाइलें खुली त्रुटि लेकिन lsof खुली फ़ाइलों के एक कानूनी संख्या
- 9. इंटरसेप्ट विंडोज़ खुली फ़ाइल
- 10. सिग्विन धीमी फ़ाइल खुली
- 11. जावा बहुत खुली फ़ाइलें
- 12. सभी खुली फ़ाइलों
- 13. टीएफएस 2010: खुली
- 14. एक अज्ञात (अनलिंक लेकिन खुली) फ़ाइल को रिंकंक करना
- 15. आधा खुली रेंज क्या है और अंत मूल्य
- 16. ईआईएनटीआर और गैर-अवरुद्ध कॉल
- 17. gdb: howto सूची खुली फ़ाइलों
- 18. IOException: बहुत सारी खुली फ़ाइलें
- 19. मोंगोड कीफाइल बहुत खुली अनुमति
- 20. php-fpm बहुत खुली फ़ाइलें
- 21. mmap() एलडी_PRELOAD और boost :: इंटरप्रोसेस
- 22. रूबी - खुली फ़ाइल, एकाधिक लाइनों को ढूंढें और बदलें
- 23. सी # थ्रेडिंग और अवरुद्ध
- 24. नई विंडो पर खुली प्रतिक्रिया
- 25. NumPy और memmap: [Errno 24] बहुत सारी खुली फ़ाइलें
- 26. RSpec और इंजीनियर त्रुटि: बहुत अधिक फ़ाइलें खुली
- 27. इनलाइन "खुली और लिखने वाली फ़ाइल" में नज़दीकी() अंतर्निहित है?
- 28. केवल खुली फ़ाइलों (नेटबीन्स) में खोजें और बदलें
- 29. node.js पर खुली प्रक्रिया को कैसे मारें?
- 30. वॉटिन का भारी उपयोग, आईई खुली समस्या
हाय मैथ्यू। आपकी सहायता के लिए धन्यवाद. लेकिन मैंने अभी देखा है कि कॉल को अवरुद्ध करने की समस्या केवल उन कार्यों के साथ होती है जिनके पास पैरामीटर के रूप में "स्ट्रक्चर stat64" है। यह fstat के लिए काम करता है, लेकिन fstat64 या stat64 के लिए नहीं। क्या यह मेरी कार्य परिभाषा में एक समस्या हो सकती है? या मैं __xstat64 और __fxstat64 को रोक दूंगा? एक बार फिर धन्यवाद। – klayme
@ कलेमे: आपका स्वागत है, और उत्तर स्वीकार करने के लिए धन्यवाद - क्या इसका मतलब है कि आपको यह ठीक काम करने के लिए मिला है? (मुझे लगता है कि '__xstat64' और' __fxstat64' को अवरुद्ध करना सही है।) –
यह http://www.tcm.phy.cam.ac.uk/sw/inodes64.html पर स्रोत के साथ संयुक्त होने पर मेरे लिए अच्छी तरह से काम करता है। वे 64-बिट संस्करणों को पैच नहीं करते हैं बल्कि केवल इंटरफ़ेस घोषित करते हैं। मैंने 32-बिट कंपाइलर को अनुमति देने के लिए भी उन्हें पैच किया जो कि 64-बिट इनोड को संभालने के लिए 'stat64()' को ठीक से कॉल कर रहा था। –