2012-02-07 12 views
9

At a post of Raymond Chen, वह सजाए गए नाम से फ़ंक्शन के अपरिचित नाम को जानने में सक्षम होने लगता है। मुझे नहीं पता कि वह यह कैसे कर सकता है।सजाए गए नाम से नाम को कैसे कम किया जाए?

इस सजाया नाम पर

? GetName @ पुशबटन @ UILibrary @@ UAEPB_WPAPAVStringHolder @ 2 @@ जेड

क्या प्रत्येक घटक क्या मतलब है?

+1

अपने कार्यान्वयन के दस्तावेज़ देखें या एक demangler के साथ चारों ओर एक सा खेलते हैं और सबसे आम पैटर्न सीखते हैं। – Xeo

+0

उत्तर ब्लॉग में है। "हम अंडरनाम प्रोग्राम से पूछते हैं"। एक छोटे से प्रशिक्षण के साथ आप ऐसे नामों खुद पढ़ सकता है, बस सूत्रों क्या आप जानते से कुछ ही सजाया नाम उत्पन्न है, लेकिन पूरा नियम जटिल होते हैं (जैसा कि C++ प्रकार प्रणाली जटिल है) और यह खोज और उन्हें सीखने के लायक नहीं है। – Suma

+0

http://stackoverflow.com/q/1617204/471164 – vitaut

उत्तर

12

अनुमान लगाने से बचने के लिए, और अभी भी वास्तव में उपकरण का उपयोग नहीं करते हैं, UndecorateSymbolName function उपयोग का उपयोग किया जा सकता है। मुझे उम्मीद है कि एक आधिकारिक सही जवाब देता है।

इसे मैन्युअल रूप से करने के लिए, this page में इस योजना पर कुछ जानकारी है, जैसे these

मूल रूपरेखा [email protected]@[email protected]@[email protected]@@something है। मुझे संदेह है कि पिछले दो हिस्सों में ढेर के आकार और सम्मेलन या समान कॉलिंग हैं, लेकिन दस्तावेज़ीकरण की संभावना अधिक है।

+0

+1 लिंक के लिए धन्यवाद। मुझे अपेक्षा से बहुत जटिल, हालांकि -_-; – Benjamin

+0

सबसे बड़ा हिस्सा (नाम और युक्त स्कॉप्स) बहुत सरल है, बस रिवर्स ऑर्डर में सूचीबद्ध है। स्पष्ट रूप से उपसर्ग बहुत अच्छी तरह से प्रलेखित है, और मैंने पैरामीटर के लिए योजना देखी है (लेकिन नहीं पाई)। – ssube

6

नाम मैंगलिंग संकलक निर्भर है।

आपके द्वारा लिंक किए गए लेख में, रेमंड मैंगलिंग को हटाने के लिए एमएस उपयोग (अंडरनाम) का उपयोग कर रहा है।

Here is a table दिखाता है कि कैसे आम कंपाइलर्स उलझन में हैं।

+0

+1 का संभावित डुप्लिकेट, रेमंड भी स्पष्ट रूप से कहता है। – sharptooth

+1

'दृश्य-studio' टैग के साथ, सवाल भी संकलक निर्भर है, और यह सब पर इसका उत्तर देने में मदद नहीं करता। – ssube

+0

हाँ मैंने देखा है कि, लेकिन मैं वह पिछले सरल उदाहरण में अकेले नाम demangle सकती है। ठीक है, तो क्या इसे आसानी से अनुमान लगाने का कोई तरीका नहीं है? – Benjamin

4

माइक्रोसॉफ्ट विजुअल स्टूडियो एक undname.exe उपकरण के साथ आता है।

http://msdn.microsoft.com/en-us/library/ms937379.aspx

यदि आप एक डिफ़ॉल्ट स्थान पर एमएस वी.एस. है आप का उपयोग कर सकते हैं:

"C: \ प्रोग्राम फ़ाइलें (x86) \ माइक्रोसॉफ्ट विजुअल स्टूडियो 10.0 \ कुलपति \ बिन \ undname.exe "? getName @ पुशबटन @ UILibrary @@ UAEPB_WPAPAVStringHolder @ 2 @@ जेड

Microsoft (R) सी ++ नाम Undecorator कॉपीराइट (सी) Microsoft Corporation। सर्वाधिकार सुरक्षित।

की Undecoration: - कि "getName @ पुशबटन @ UILibrary @@ UAEPB_WPAPAVStringHolder @ 2 @@ जेड?": - "सार्वजनिक: आभासी wchar_t स्थिरांक * __thiscall UILibrary :: पुशबटन :: getName (कक्षा UILibrary :: StringHolder * *) "

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