2012-04-11 46 views
0

我正在查看使用depends從dll導出的函數列表,並且我注意到名稱中包含一些奇怪的符號。他們還可能0一些其他編號替代格式DLL的導出函數如下所示依賴

​​

的。

@@和字母的數量有所不同。

任何人都可以告訴他們代表什麼?

回答

1

這是由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++類。

0

在某些情況下,您可能有興趣使用API​​以編程方式打開這些名稱。微軟正在提供UnDecorateSymbolName