के रूप में चलाने के बिना किसी प्रोग्राम को अपनी शुरुआत से कैसे ढूंढें, मैं एक ऐसा टूल लिख रहा हूं जो उपयोगकर्ता द्वारा निर्दिष्ट प्रोग्राम का पता लगाने के लिए डीटीआर के माध्यम से कॉल करता है।रूट को
यदि मेरा टूल प्रोग्राम को चलाने के लिए dtrace -c का उपयोग करता है, तो मैं प्रोग्राम के लिए कोई तर्क नहीं दे सकता, बल्कि प्रोग्राम डीटीआरएस के सभी विशेषाधिकारों के साथ चलता है - अर्थात रूट (मै मैक ओएस एक्स पर हूं)। यह कुछ चीजें बनाता है जो काम तोड़ना चाहिए, और स्पष्ट रूप से बहुत सी चीजें बनाती हैं जिन्हें संभव नहीं करना चाहिए।
अन्य समाधान मुझे पता है की कार्यक्रम अपने आप को शुरू करने के लिए, यह SIGSTOP
भेजकर इसे रोक सकते हैं, dtrace -p
करने के लिए अपने पीआईडी पारित, तो यह SIGCONT
भेजकर इसे जारी है। समस्या यह है कि या तो प्रोग्राम बिना किसी खोज के कुछ सेकंड तक चलता है जबकि डीटीआरएस प्रतीक जानकारी एकत्र करता है या, अगर मैं प्रक्रिया को जारी रखने से पहले कुछ सेकंड तक सोता हूं, तो डीटी्रेस शिकायत करता है कि objc<pid>:<class>:<method>:entry
कोई जांच नहीं करता है।
क्या कोई तरीका है कि मैं उपयोगकर्ता के खाते के तहत प्रोग्राम को रूट के रूप में नहीं चला सकता, लेकिन अभी भी डीटीआरएस शुरुआत से इसका पता लगाने में सक्षम है?
यहां तक कि बेहतर: इसे सभी में रोल करें। एक पाइप, कांटा बनाएं, बच्चे को पाइप पर प्रतीक्षा करें, dtrace -p CHILD_PID, पाइप को लिखें, बच्चा उठता है और निष्पादन करता है। – bstpierre
वादा करता है। मुझे नहीं पता कि यह काम करेगा, हालांकि: मेरा टूल पायथन में लिखा गया है, और यह कोको कार्यक्रमों का पता लगाने के लिए डिज़ाइन किया गया है। मेरे उपकरण में किसी कोको के बिना, मुझे लगता है कि मुझे अभी भी त्रुटि मिलेगी कि objc प्रदाता कोई जांच नहीं करता है। लेकिन मैं कल कोशिश करूँगा। –