अब जब एल कैप्टेन "जड़ रहित" है, तो क्या डीट्रेस काम करने का कोई तरीका है?


21

मैं डिबगिंग को डिबगिंग के लिए एक अमूल्य उपकरण मानता हूं और सभी प्रकार के मुद्दों का निवारण करता हूं, Apple द्वारा El Capitan के हिस्से के रूप में दो दर्जन dtrace टूलकिट लिपियों का उल्लेख नहीं करने के लिए ।

हालांकि El Cap पर, dtrace को चलाने में आम तौर पर सभी dtrace को बेकार बनाने में त्रुटियों का एक अंतहीन परिणाम होता है।

जवाबों:


18

10.11 में सिस्टम इंटीग्रिटी प्रोटेक्शन को निष्क्रिय किया जा सकता है, हालांकि यह ऐसा कुछ नहीं है जिसे आपको हल्के ढंग से करना चाहिए।

आप निम्नलिखित करके एसआईपी को पूरी तरह से निष्क्रिय कर सकते हैं:

  1. अपने मैक को रिबूट करें
  2. रिबूट के दौरान rebR पकड़ो
  3. से उपयोगिताएँ मेनू, चलाने के टर्मिनल
  4. निम्नलिखित कमांड दर्ज करें
csrutil disable

वैकल्पिक रूप से आप SIP को फिर से सक्षम कर सकते हैं जबकि अभी dtraceभी निम्नलिखित को चलाकर काम करने की अनुमति दी जाती है:

csrutil enable --without dtrace

ध्यान दें, ऐसा करते समय आपको निम्नलिखित चेतावनी मिलेगी:

यह एक असमर्थित कॉन्फ़िगरेशन है, भविष्य में टूटने और आपकी मशीन को अज्ञात स्थिति में छोड़ने की संभावना है।

एक बार जब आप रिबूट dtraceकरेंगे , तो यह काम करेगा जैसा कि योसेमाइट में हुआ था।


शाबाश - जब अन्य धागा :-) मैं करने जा रहा हूँ का जवाब दे मैं इस पोस्ट याद फिर से प्लग रिच के सत्र वीडियो और ब्लॉग: derflounder.wordpress.com/2015/10/01/...
bmike

2
यह बिल्कुल सच नहीं है। Csrutil के माध्यम से सक्षम किए गए DTrace से आप कर्नेल के DTrace को लागू कर सकते हैं - लेकिन केवल उन बायनेरिज़ पर जिनके पास प्रतिबंधित एंटाइटेलमेंट ध्वज नहीं है। आप प्रतिबंधित एंटाइटेलमेंट फ़्लैग को, यहां तक ​​कि रूट के रूप में, सभी सिप को बंद नहीं कर सकते। इसका मतलब है कि DTrace सक्षम होने के साथ आप नॉन-सिस्टम बायनेरिज़ को केवल DTrace कर सकते हैं। हालाँकि, यदि कोई गैर-सिस्टम बाइनरी सिस्टम फ़ोल्डर्स में स्थापित साझा-लिबर का उपयोग करता है (जो कि बहुत सारे प्रोग्राम करते हैं), तो आप या तो उसका समर्थन नहीं कर सकते। तो काम करने का एकमात्र तरीका 'काम करने के लिए' जैसे कि यह योसेमाइट में था 'अपने सभी सिस्टम फ़ोल्डरों की एक प्रति बनाना है, और इसे काट देना है
JJ

4

बाइनरी को उस निर्देशिका में कॉपी करें जो "प्रतिबंधित" नहीं है, उदाहरण के लिए, /tmp

csrutil disableकुछ हद तक dtruss के लिए काम नहीं करता है। लेकिन @ जेजे ने कहा कि chrootकाम करता है, इससे मुझे प्रेरणा मिली।

फिर भी मुझे नहीं पता कि यह क्यों काम करता है। यह "संरक्षित निर्देशिका" के साथ कुछ करना हो सकता है, मुझे लगता है।

यहाँ परीक्षण है:

CC@~ $ csrutil status
System Integrity Protection status: disabled.
CC@~ $ sudo dtruss /bin/echo
dtrace: failed to execute /bin/echo: dtrace cannot control executables signed with restricted entitlements
CC@~ $ cp /bin/echo /tmp
CC@~ $ sudo dtruss /tmp/echo

SYSCALL(args)        = return
thread_selfid(0x0, 0x0, 0x0)         = 46811 0
csops(0x0, 0x0, 0x7FFF51B6CA20)      = 0 0
issetugid(0x0, 0x0, 0x7FFF51B6CA20)      = 0 0
shared_region_check_np(0x7FFF51B6A918, 0x0, 0x7FFF51B6CA20)      = 0 0
stat64("/usr/lib/dtrace/libdtrace_dyld.dylib\0", 0x7FFF51B6BEA8, 0x7FFF51B6CA20      = 0 0
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.