2012-07-17 8 views
6

में किसी निर्देश का पता प्राप्त करें निर्देश का पता पाने के लिए कोई तरीका? मैंने निर्देश लेबल करने और लेबल का पता प्राप्त करने के लिए उपयोग करने का प्रयास किया है, लेकिन ऐसा लगता है कि यह केवल & & ऑपरेटर के साथ जीसीसी कंपाइलर में काम करता है। (देखें: this article) यदि अन्य कंपाइलर क्या हैं?सी/सी ++

इस प्रश्न के कोई विचार?

+0

आप क्यों पूछते हैं? –

+4

सी ++ निर्देशों के साथ लागू करने की आवश्यकता नहीं है। –

+0

हाय बेसिल, मैं वर्तमान में निर्देश/डेटा घड़ी सुविधाओं पर कुछ शोध कर रहा हूं। – nigong

उत्तर

4

मुझे यकीन नहीं है कि सी या सी ++ भाषा मानक निर्देश के बारे में बोलते हैं; आप मानव गुलामों के एक बड़े समूह द्वारा निष्पादित किए जाने के लिए संकलित एक सी प्रोग्राम चला सकते हैं (लेकिन यह अनौपचारिक होगा, भले ही मानक अनुरूप हो)। आप अपने आप को एक पेंसिल और पेपर के साथ एक सरल छोटे कार्यक्रम चला सकते हैं, आप एक सी दुभाषिया, आदि ... आदि का उपयोग कर सकते हैं ...

एक अनुकूलन सी या सी ++ कंपाइलर कुछ सी कथनों का अनुवाद कई मशीन निर्देशों में भी करेगा विभिन्न स्थानों पर स्थित (विशेष रूप से, कंपाइलर्स इनलाइन या क्लोन फ़ंक्शन या यहां तक ​​कि बुनियादी ब्लॉक भी करते हैं, यहां तक ​​कि स्रोत कोड में inline कीवर्ड के बिना)।

अधिकांश सिस्टम पर, आप एक दिनचर्या कोड (उदाहरण के लिए असेंबली) को सौंप सकते हैं जो एक सूचक मूल्य के रूप में लौटाता है (यानी कॉलर का पता)।

जीसीसी (और संगत कंपाइलर्स, शायद क्लैंग/एलएलवीएम) के साथ, आप __builtin_return_address और संबंधित बिल्टिन का उपयोग कर सकते हैं।

लिनक्स पर जीएनयू लिबिक आपको backtrace प्रदान करता है (लेकिन जब मैंने कोशिश की, तो मुझे इसके द्वारा निंदा की गई है)।

सूचना इन चाल जब -fno-frame-pointer

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

+0

हाय बेसिल, आपके उत्तर के लिए धन्यवाद। लेकिन मुझे निर्देश और बयान के संबंध में कहना नहीं था। मैं क्या करना चाहता हूं बस सी/सी ++ में एक बयान या निर्देश का पता प्राप्त करें। :) – nigong

+1

@ निगोंग वह मूल रूप से कह रहा है कि यहां तक ​​कि निर्देश भी नहीं हो सकते हैं। विशेष रूप से अगर यह एक सीपीयू के बजाए गुलामों द्वारा चलाया जा रहा था। – Mysticial

+1

यदि 'निर्देश' और 'कथन' पर्याप्त समान अवधारणाएं थीं, तो यह संभव हो सकता है। हालांकि, अधिकांश कथन कई निर्देश उत्पन्न करते हैं, जो कि लगातार भी नहीं हो सकते हैं (लूप संरचनाएं, आदि) और अन्य विवरणों के निर्देशों के साथ इंटरलीव (ऑप्टिमाइज़ेशन, निर्देश शेड्यूलिंग) हो सकते हैं। – twalberg

0

एकमात्र मानक सी या सी ++ निर्माण जो निर्देश के पते के करीब भी है, एक फ़ंक्शन पॉइंटर है, जो मुझे लगता है कि आपका मतलब यह नहीं है। हालांकि, आप कोड के आवश्यक ब्लॉक वाले फ़ंक्शंस के बजाय पॉइंटर्स के बजाय जीसीसी लेबल मानों के साथ जो कुछ भी कर सकते हैं, उसे पूरा कर सकते हैं।

सी/सी ++ में कोई अन्य विकल्प नहीं है।

2

सावधानी: बॉक्स यहाँ से बाहर का रास्ता ..

आप लिंकर कि पते (रिश्तेदार या अन्यथा) अनुप्रयोगों वस्तुओं (कार्य करता है और डेटा) के शामिल एक नक्शा फाइल उत्पन्न किया है सकते हैं? आपका एप्लिकेशन बस लिंकर मानचित्र फ़ाइल को पार्स कर सकता है ...

+0

लिनक्स पर, 'dladdr' आपके लिए यह करता है-' 'और 'dlopen') या कम से कम बहुत मदद करता है। –