I am recompiling a C++ binary using the same sources. OS is Windows Server 2008 R2, compiler is Microsoft Visual Studio 2005.
After that I am running dumpbin.exe /ALL /DISASM /RAWDATA:NONE
and comparing outputs.
There is no difference in disassembly but there is difference in how some names from anonymous namespaces are mangled.
For example for the following definition in .cpp file:
namespace {
TCHAR l_pszSlashes[] = _T("\\/");
}
I can have the following variations:
?l_pszSlashes@?A0x79ec3b0d@@3PA_WA (wchar_t * `anonymous namespace'::l_pszSlashes)
?l_pszSlashes@?A0xa9cc3791@@3PA_WA (wchar_t * `anonymous namespace'::l_pszSlashes)
The difference is presented only when I am comparing freshly built dll and the old one from another machine. If I am compiling this dll on the same PC I do not have this difference.
So the questions are: What does this hex number part in mangled name means? Why are this hex number part is different in some cases? How can I compile this project to have these name the same.