2012-04-11 14 views
0

で表示されています。私はDLLを使ってexportされた関数のリストを探していましたが、名前に奇妙な記号がいくつか含まれていました。彼らは、フォーマットおそらくいくつかの他の番号に置き換えDLLの輸出関数は、

​​

も0です。

@@とアルファベットの数は異なります。

誰でも自分の表現を教えていただけますか?

答えて

1

これは、C++コンパイラによって装飾されたC++識別子の名前です。あなたは、元のC++宣言に戻ってそれを変換するには、Visual Studioコマンドプロンプトからundname.exeユーティリティを実行することができます

それは64ビットコードにコンパイルのFooクラスのコピーコンストラクタ、作る
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" 

。私が知っている正確な装飾アルゴリズムは文書化されていません。一般に、C++は多重定義をサポートしているため、リンカのシンボルの衝突を避けるために名前修飾が使用されています。 extern "C"を使用して装飾を抑制できますが、C++クラスでは機能しません。

0

いくつかの状況では、プログラム的にマイクロソフトがUnDecorateSymbolNameを提供しているAPIを使用してこれらの名前をundecorateて興味があるかもしれません。