2012-02-27 21 views
15

के लिए स्टेटिक कॉल ग्राफ़ जनरेशन मैं लिनक्स कर्नेल (किसी दिए गए कर्नेल कॉन्फ़िगरेशन के लिए) के कॉल ग्राफ़ को स्थिर रूप से उत्पन्न करने के लिए एक टूल की तलाश में हूं। जेनरेट कॉल ग्राफ़ "पूर्ण" होना चाहिए, इस अर्थ में कि सभी कॉल शामिल हैं, संभावित अप्रत्यक्ष जिन्हें हम मान सकते हैं केवल लिनक्स कर्नेल के मामले में फ़ंक्शन पॉइंटर्स के उपयोग के माध्यम से किया जाता है।लिनक्स कर्नेल

उदाहरण के लिए, इस समारोह सूचक प्रकार का विश्लेषण करके किया जा सकता है: इस दृष्टिकोण ग्राफ में ज़रूरत से ज़्यादा किनारों को जन्म दे सकता है, लेकिन यह मेरे लिए ठीक है।

ncc लेकिन मैं इसे 3.0 कर्नेल पर काम करने में सफल नहीं हुआ, इस विचार को लागू करने के लिए लगता है। कोई अन्य सुझाव?

मैं इस दृष्टिकोण भी मामले हैं, जहां समारोह सूचक डाले उपयोग किया जाता है में किनारों लापता करने के लिए ले जा सकता है अनुमान लगा रहा हूँ, इसलिए मैं भी जानते हुए भी कि क्या यह लिनक्स कर्नेल में होने की संभावना है में रुचि होगी।

एक साइड नोट के रूप में, ऐसा लगता है कि संभावित सूचक मूल्यों का अनुमान लगाने के लिए स्रोत के अर्थपूर्ण विश्लेषण करने में सक्षम हैं, लेकिन AFAICT, उनमें से कोई भी लिनक्स कर्नेल जैसे किसी प्रोजेक्ट में उपयोग करने के लिए डिज़ाइन नहीं है ।

किसी भी मदद की बहुत सराहना की जाएगी।

+0

आप इसे काम करने में सफल नहीं हुए? आपने कितना प्रयास किया? नीचे दिए गए मेरे जवाब में, हमने एक विशाल प्रणाली का विश्लेषण किया। सही स्रोतों, संकलन डेटा को विश्वसनीय रूप से कैप्चर करने और इसे संसाधित करने के लिए हमें कई मानव-महीने लगे।क्या आपको लगता है कि पहली बार लिनक्स के लिए ऐसा करना बहुत तेज़ होना चाहिए? –

+0

खैर, मैं बस एनसीसी दस्तावेज में प्रदान किए गए लिनक्स कर्नेल के लिए उपयोग केस उदाहरण के पत्र का पालन करता हूं। इसके परिणामस्वरूप एक त्रुटि हुई कि मैं अभी भी पता लगाने की कोशिश कर रहा हूं। – addalbx

+0

ठीक है, इसलिए लिनक्स को संसाधित करने के लिए एनसीसी माना जाता है। तब आपका समय बहुत छोटा होना चाहिए क्योंकि किसी और ने यह सब काम किया है। बेशक, इस तरह के काम स्थिर होने की संभावना नहीं है; लिनक्स कर्नल चालें। क्या आपने एनसीसी बिल्डरों से संपर्क किया है और उनसे पूछा है? –

उत्तर

5

हम विश्लेषण करने के लिए अंक-वैश्विक किया है (अप्रत्यक्ष समारोह संकेत के साथ) और 26 मिलियन लाइनों (18,000 संकलन इकाइयों) की अखंड सी प्रणाली से भरा कॉल ग्राफ निर्माण।

हमने इसे हमारे DMS Software Reengineering Toolkit, इसका C Front End और इसके associated flow analysis machinery का उपयोग करके किया। अंक-विश्लेषण मशीनरी (और अन्य विश्लेषण) रूढ़िवादी हैं; हां, आपको कुछ फर्जी पॉइंट मिलते हैं और इसलिए परिणामस्वरूप किनारों को कॉल करते हैं। ये बचने के लिए बहुत मुश्किल हैं। आप ऐसे कार्यों के बारे में कुछ महत्वपूर्ण तथ्यों को प्रदान करके ऐसे विश्लेषकों की सहायता कर सकते हैं, और "एम्बेडेड सिस्टम [और ओएसई] जैसे ज्ञान का उपयोग करके कॉल ग्राफ़ में चक्र नहीं होते हैं, जिसका अर्थ है कि आप इनमें से कुछ को खत्म कर सकते हैं। बेशक, आपको अपवादों की अनुमति देना है; मेरा नैतिक: "बड़ी प्रणालियों में, सबकुछ होता है।"

विशेष समस्या गतिशील लोड शामिल (!) सी एक विशेष लोड हो रहा है योजना इस विशेष सॉफ्टवेयर के लिए विशिष्ट का उपयोग कर मॉड्यूल है, लेकिन यह सिर्फ समस्या को जोड़ा गया।

समारोह संकेत पर डाले किनारों नहीं खोना चाहिए; एक रूढ़िवादी विश्लेषण को यह मानना ​​चाहिए कि कास्ट पॉइंटर प्रणाली में किसी भी समारोह से मेल खाता है जो कि जाली के परिणाम से संबंधित हस्ताक्षर के साथ होता है। अधिक समस्याग्रस्त ऐसे हैं जो सॉर्ट-ऑफ-संगत हस्ताक्षर उत्पन्न करते हैं; यदि आप शून्य * foo (uint) को शून्य कार्य करने के लिए फ़ंक्शन पॉइंटर डालें, तो वास्तविक फ़ंक्शन को एक int स्वीकार करने पर, विश्लेषण के बिंदु आवश्यक रूप से गलत कार्यों का चयन करेंगे। आप इसके लिए विश्लेषक को दोष नहीं दे सकते; उस मामले में कास्ट निहित है। हां, हमने 26 मिलियन लाइन सिस्टम में इस तरह के कचरे को देखा।

यह निश्चित रूप से लिनक्स का विश्लेषण करने का सही स्तर है (जो मुझे लगता है कि केवल 8 मिलियन लाइनें या तो :-) है। लेकिन हमने इसे विशेष रूप से लिनक्स पर नहीं देखा है।

इस उपकरण की स्थापना क्योंकि आप खुद को संकलन के बारे में सभी विवरण पर कब्जा करने के लिए है जटिल है, और विशेष रूप से लिनक्स का विन्यास आप उत्पन्न करना चाहते KERNAL। तो आपको कमांड लाइन स्विच आदि प्राप्त करने के लिए कंपाइलर कॉल को अवरुद्ध करना होगा।

+2

दुर्भाग्यवश, मैं वाणिज्यिक उपकरणों का उपयोग करने से बचना चाहता हूं। आपके सहयोग के लिए धन्यवाद। – addalbx

+0

@addalbx: क्या आपको कभी जवाब मिला? (मुझे लगता है कि आपने एलएलवीएम भी कोशिश की है)। –

+0

मैंने छोड़ दिया, हालांकि मुझे हल्की सफलता मिली। चीजें वास्तव में एनसीसी के साथ वास्तव में भी काम करती हैं, मुख्य बाधा कर्नेल के जीसीसी-इस्म्स है - इसके लिए बहुत सारी चीजों की आवश्यकता होती है ... अगर मैं गलत हूं तो मुझे सही करें, लेकिन यह हमारे सॉफ़्टवेयर के साथ बहुत अलग नहीं होगा - या? – addalbx

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