2012-02-16 23 views
5

से संकलन अनुकूलन ध्वज का पता लगाएं यहां मेरे पास जीसीसी/जी ++ की धारणा के साथ, इसके निर्माण पर्यावरण को जानने के बिना निष्पादन योग्य है। क्या संकलन के दौरान उपयोग किए गए अनुकूलन ध्वज को खोजने का कोई तरीका है (जैसे O0, O2, ...)?निष्पादन योग्य

सभी साधनों का स्वागत है, भले ही बाइनरी या कुछ डीबग परीक्षण का विश्लेषण करके जीडीबी (यदि हम मानते हैं कि -जी ध्वज संकलन के दौरान उपलब्ध है) का विश्लेषण कर रहा है।

+0

यह प्रश्न मदद कर सकता है: http://stackoverflow.com/questions/189350/detect-gcc-compile-time-flags-of-a-binary – Nick

+3

मुझे इस तरह के अनुरोध के कारण में बहुत दिलचस्पी होगी। विशेष रूप से, आपको पता होना चाहिए कि अनुकूलन को व्यक्तिगत आधार पर चालू और बंद किया जा सकता है, और 'ओ' स्तर सुविधा के लिए केवल समूह हैं। –

+1

विशेष रूप से [इस जानकारीपूर्ण उत्तर] (http://stackoverflow.com/a/340828/15416) उस प्रश्न पर देखें। यह निर्णायक सबूत है कि आप इसे विश्वसनीय रूप से नहीं कर सकते हैं। – MSalters

उत्तर

-4

शायद आप ऐसा नहीं करना चाहते हैं।

इसके बारे में सोचें ... क्या आप उस कोड का उपयोग करना चाहते हैं जो इसे संकलित करने के लिए उपयोग किए गए अनुकूलन विकल्पों के आधार पर व्यवहार को बदलता है?

यदि नहीं - तो आप इसे क्यों लिखना चाहते हैं?

+3

क्यू का जवाब नहीं देता है, सर्वोत्तम टिप्पणी पर। –

+0

मुझे लगता है कि उसका मतलब है कि उसके पास निष्पादन योग्य है कि वह जांच करना चाहता है। – MByD

+1

नहीं, यह सवाल का जवाब नहीं देता है। लेकिन इसके बारे में सोचें: अनुकूलन को प्रोग्राम व्यवहार को बदलना चाहिए, है ना? ऐसा लगता है जैसे वह ऐसा करना चाहता है ... – jakob

2

यदि आप भाग्यशाली हैं, तो कमांड लाइन निष्पादन योग्य फ़ाइल में मौजूद है, ऑपरेटिंग सिस्टम और फ़ाइल प्रारूप के आधार पर। यदि यह एक एल्फ फ़ाइल है, तो objdumpGNU binutils

0

से सामग्री को डंप करने का प्रयास करें, मुझे वास्तव में यह नहीं पता कि यह मदद कर सकता है, लेकिन O0 की जांच करना disassembly (objdump -d) में काफी आसान है, क्योंकि जेनरेट कोड में कोई अनुकूलन नहीं है और डीबगिंग को सरल बनाने के लिए कुछ निर्देशों को जोड़ता है।

आमतौर पर एक x86 पर, फ़ंक्शन के प्रस्तावना में स्टैक पॉइंटर को सहेजना शामिल है (बैकट्रैस के लिए, मुझे लगता है)।

... मुख्य: तो अगर आप का पता लगाने, उदाहरण के लिए, मुख्य कार्य, आप की तरह कुछ देखना चाहिए ... धक्का% RBP ... mov% आरएसपी,% RBP

और तुम कार्यों की लगभग हर शुरुआत में यह "पैटर्न" देखना चाहिए। अन्य लक्ष्यों के लिए (मुझे पता नहीं है कि आपका लक्ष्य प्लेटफ़ॉर्म क्या है), आपको प्रस्तावों में या फ़ंक्शन कॉल से पहले कम या समान असेंबली अनुक्रम देखना चाहिए।

अन्य अनुकूलन स्तरों के लिए, चीजें ट्रिकियर के रास्ते हैं।

अस्पष्ट शेष के लिए खेद है और पूरे प्रश्न का उत्तर नहीं दे रहा है ... बस उम्मीद है कि इससे मदद मिलेगी।

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