Mangle dll exported names with DEF file

2019-07-18 05:50发布

I'm trying to create a proxy dll and ran into this issue. Suppose I have following files:

a.cpp:

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

a.def:

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

Then I run:

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

Output of dumpbin /exports c.dll shows that following symbols are exported: func ??4Test

Where is the rest of the "Test" exported name? And is there any way to get it back?

2条回答
男人必须洒脱
2楼-- · 2019-07-18 06:41

Give this a shot instead, without using a DEF file:

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

Now it shouldn't mangle the function name at all.

查看更多
Summer. ? 凉城
3楼-- · 2019-07-18 06:52

One idea which came to my mind: export the symbols using a different placeholder character than "@" (e.g. "^") and then lateron rewrite the export table by treating the DLL as a PE file and rewriting the export table entries on disk.

查看更多
登录 后发表回答