Как undecorate имя от украшенного имени?
на посту Раймонда Чена, Он, кажется, может знать неотделанное имя функции от украшенного имени. Я понятия не имею, как он мог это сделать.
в этом украшенном имени,
?GetName@PushButton@UILibrary@@UAEPB_WPAPAVStringHolder@2@Z
Что означает каждый компонент?
3 ответов
чтобы не гадать, и не использовать инструменты UndecorateSymbolName
функции может пригодиться. Я надеюсь, что это дает авторитетный правильный ответ.
сделать это вручную, на этой странице имеет некоторую информацию о схеме, как и эти.
основной контур _name@scope@scope@@parameters@something@@something
. Я подозреваю, что последние две части-это размер стека и соглашение о вызове или подобное, но документация, вероятно, имеет более подробную информацию.
искажение имени зависит от компилятора.
в статье, которую вы связали, Raymond использует MS util (undname) для удаления искажения.
таблица показывает, как часто компиляторы калечат.
Microsoft Visual Studio поставляется с undname.инструмент exe.
http://msdn.microsoft.com/en-us/library/ms937379.aspx
Если у вас есть MS VS по умолчанию, вы можете использовать:
"C:\Program файлы (x86)\Microsoft Visual Studio 10.0\VC\bin\undname.exe"?GetName@PushButton@UILibrary@@UAEPB_WPAPAVStringHolder@2@Z
Microsoft (R) C++ Имя Undecorator Copyright (C) Корпорация Майкрософт. Все права зарезервированный.
Undecoration of: -"?Метод getname@кнопка@UILibrary@@UAEPB_WPAPAVStringHolder@2@@Z" это :- "общественный: виртуальный константный тип wchar_t * __thiscall UILibrary::кнопки::метод getname(UILibrary класс::StringHolder * *)"