2016-02-22 6 views
7

में __proc_info प्रतीक मैं यह पता लगाने की कैसे करता है VMMAP प्रक्रिया संचालित करना चाहते हैं का पता लगाएँ।XNU परियोजना

dtrace के साथ इस निष्पादन योग्य चलाने के बाद, ऐसा लगता है कि विधि proc_regionfilename कि आभासी स्मृति में प्रत्येक अनुभाग के पता स्थान निकालें।

तो, मैं एक छोटे से गहरा खोदा, और फ़ाइल
libsyscall/रैपर/libproc/libproc.c

समारोह के मुख्य भाग में मैं देखता हूँ कि मुख्य कॉल proc_pidinfo है के तहत XNU में इसके कार्यान्वयन पाया:

retval = proc_pidinfo(pid, PROC_PIDREGIONPATHINFO, (uint64_t)address, &reginfo, sizeof(struct proc_regionwithpathinfo)); 

और proc_pidinfo जो __proc_info प्रतीक को अपनी बारी में कॉल:

int __proc_info(int callnum, int pid, int flavor, uint64_t arg, void * buffer, int buffersize); 

हालांकि, इस प्रतीक ग कोड में पाया गया है, और मुझे आश्चर्य है कि यह पूर्व-संकलन, संकलन, लिंक या वास्तविक समय के दौरान कैसे बनाया गया है।

किसी भी विचार जहां मैं इसे पा सकते हैं, या कैसे करता है यह बनाया जा रहा (मैं अभी तक गिरी संकलित करने के लिए प्रयास नहीं किया है)।

धन्यवाद

उत्तर

1

proc_info एक syscall है, इसलिए इसे कार्यान्वयन कर्नेल में है। संस्करण 10.11.2 में पाया के लिए स्रोत कोड यहां पाया जा सकता है:

http://opensource.apple.com/source/xnu/xnu-3248.20.55/bsd/kern/proc_info.c

+0

धन्यवाद, लेकिन क्यों करता है यह libproc.c में घोषणा घायल रूप में किया जाता है (__proc_info बजाय proc_info की)? – Zohar81

+0

मुझे लगता है कि '__proc_info' syscall शिम कि नियमित रूप से समारोह syscall सम्मेलन में सम्मेलन बुला बदल जाता है और वास्तव में कर्नेल स्थान में जाल कारण बनता है। वे कर्नेल की सिस्कल तालिका से स्वत: उत्पन्न होते हैं, इसलिए आपको उनके लिए कोई प्रत्यक्ष स्रोत कोड नहीं मिलेगा। हालांकि 100% निश्चित नहीं है। – pmdj

संबंधित मुद्दे