3

プロキシdllを作成しようとしていますが、この問題が発生しました。次のファイルがあるとします。

a.cpp:

extern "C" int __declspec(dllexport) func(int x) {return x;}

a.def:

EXPORTS
func
??4Test@@QAEAAU0@ABU0@@Z = func

それから私は実行します:

cl /c c.cpp
link /RELEASE /DLL /DEF:c.def /OUT:c.dll c.obj

の出力dumpbin /exports c.dllは、次のシンボルがエクスポートされることを示しています:func ?? 4Test

「テスト」の残りのエクスポートされた名前はどこにありますか?そして、それを取り戻す方法はありますか?

4

2 に答える 2

1

DEF ファイルを使用せずに、代わりにこれを試してみてください。

extern "C" __declspec(dllexport) int __cdecl func(int x) {return x;}

これで、関数名をまったく壊してはいけません。

于 2012-11-27T17:31:25.177 に答える
-1

私の頭に浮かんだアイデアの 1 つは、"@" 以外のプレースホルダー文字 ("^" など) を使用してシンボルをエクスポートし、後で DLL を PE ファイルとして扱い、ディスク上のエクスポート テーブル エントリを書き換えることで、エクスポート テーブルを書き換えることです。

于 2013-11-20T20:51:17.533 に答える