Mangle dll使用DEF文件导出名称

时间:2012-11-27 17:13:06

标签: c++ dll hyperlink function

我正在尝试创建代理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

其余的“测试”导出名称在哪里?有没有办法让它回来?

2 个答案:

答案 0 :(得分:0)

改为使用DEF文件,而不是使用DEF文件:

  

extern“C”__ declspec(dllexport)int __cdecl func(int x){return x;}

现在它根本不应该破坏函数名称。

答案 1 :(得分:0)

我想到了一个想法:使用与“@”不同的占位符字符(例如“^”)导出符号,然后通过将DLL视为PE文件并重写导出表条目来重写导出表在磁盘上。