我正在查看使用depends從dll導出的函數列表,並且我注意到名稱中包含一些奇怪的符號。他們還可能0一些其他編號替代格式DLL的導出函數如下所示依賴
的。
@@和字母的數量有所不同。
任何人都可以告訴他們代表什麼?
我正在查看使用depends從dll導出的函數列表,並且我注意到名稱中包含一些奇怪的符號。他們還可能0一些其他編號替代格式DLL的導出函數如下所示依賴
的。
@@和字母的數量有所不同。
任何人都可以告訴他們代表什麼?
這是由C++編譯器裝飾的C++標識符的名稱。您可以運行從Visual Studio命令提示符undname.exe工具將其轉換回原來的C++聲明:
C:\>undname [email protected]@[email protected]@@Z
Microsoft (R) C++ Name Undecorator
Copyright (C) Microsoft Corporation. All rights reserved.
Undecoration of :- "[email protected]@[email protected]@@Z"
is :- "public: __cdecl Foo::Foo(class Foo const & __ptr64) __ptr64"
這使得它的拷貝構造函數的Foo類,編譯成64位的代碼。我沒有記錄確切的裝飾算法。通常,名稱修飾用於避免鏈接器符號衝突,因爲C++支持重載,所以是必需的。您可以通過使用extern "C"
來抑制裝飾,但不能用於C++類。
在某些情況下,您可能有興趣使用API以編程方式打開這些名稱。微軟正在提供UnDecorateSymbolName。