2013-05-03 8 views
12

का उपयोग करने योग्य निष्पादन योग्य गतिशील प्रतीक संकल्प मैं वर्तमान में LLVM'sObjectFile (दस्तावेज here) निष्पादन योग्य का प्रतिनिधित्व करने के लिए उपयोग कर रहा हूं। मैंने ObjectFile पर निष्पादन योग्य में सफलतापूर्वक पढ़ा है और यह निर्धारित करना चाहता हूं कि मेरे निष्पादन योग्य में कौन से कॉल गंतव्य पते begin_dynamic_symbols() फ़ंक्शन पर कॉल द्वारा प्राप्त symbol_iterator में निहित प्रतीकों के नाम से मेल खाते हैं। symbol_iterator में प्रत्येक प्रतीक पर इटरेट करने से मुझे प्रत्येक प्रतीक और उसका पता का नाम मिलता है, लेकिन चूंकि प्रतीकों गतिशील होते हैं, प्रत्येक प्रतीक का पता -1 होता है; यह इंगित करता है कि ObjectFile प्रतीक नामों को उनके संबंधित कॉल गंतव्य पते से सीधे संबद्ध नहीं करता है।एलएलवीएम

क्या यह निर्धारित करने का कोई तरीका है कि कौन से कॉल गंतव्य पते ObjectFile में गतिशील प्रतीकों को मानचित्र करते हैं? अगर मैं ऐसा करने से बच सकता हूं तो मैं PLT और GOT के माध्यम से मैन्युअल रूप से सभी कूदों की गणना नहीं करूंगा।

+0

मुझे लगता है कि आपको इसे कैफे-डे मेलिंग सूची पर पूछना चाहिए: http://lists.cs.uiuc.edu/pipermail/cfe-dev/ –

उत्तर

1

डायनामिक प्रतीकों के पते केवल तभी गणना की जाती हैं जब ऑब्जेक्ट फ़ाइलों को स्मृति में लोड किया जाता है और प्रोग्राम की प्रतीक तालिका में लिंक किया जाता है। आम तौर पर, लिंक करने से पहले उनके अंतिम पते को निर्धारित करना असंभव है।

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

शुभकामनाएं!