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?
Give this a shot instead, without using a DEF file:
Now it shouldn't mangle the function name at all.
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.