If undecorated names are given in the DLL export table, why does link /dump /exports show me decorated names?
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.
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.)