If you run the link /dump /exports
command on a DLL
which exports only undecorated names,
you may find that in addition to showing those undecorated names,
it also shows the fully-decorated names.
We’re building a DLL and for some functions, we have chosen to suppress the names from the export table by using the NONAME keyword. When we dump the exports, we still see the names. And the functions which we did want to export by name are showing up with their decorated names even though we list them in the DEF file with undecorated names. Where is the decorated name coming from? Is it being stored in the DLL after all?
1 00004F1D [NONAME] _Function1@4 2 000078EF [NONAME] _Function2@12 3 00009063 [NONAME] _Function3@8
The original decorated names are not stored in the DLL.
The link /dump /exports
command is sneaky
and looks for a matching PDB file and, if finds one,
extracts the decorated names from there.
(How did I know this?
I didn’t, but I traced each file accessed by the
link /dump /exports
command and observed that
it went looking for the PDB.)
0 comments