Я перекомпилирую бинарный файл C ++, используя те же источники. ОС - Windows Server 2008 R2, компилятор - Microsoft Visual Studio 2005.
После этого я запускаю dumpbin.exe /ALL /DISASM /RAWDATA:NONE
и сравниваю результаты.
Нет разницы в разборке, но есть разница в том, как искажаются некоторые имена из анонимных пространств имен.
Например, для следующего определения в файле .cpp:
namespace {
TCHAR l_pszSlashes[] = _T("\\/");
}
У меня могут быть следующие варианты:
?l_pszSlashes@?A0x79ec3b0d@@3PA_WA (wchar_t * `anonymous namespace'::l_pszSlashes)
?l_pszSlashes@?A0xa9cc3791@@3PA_WA (wchar_t * `anonymous namespace'::l_pszSlashes)
Разница представлена только тогда, когда я сравниваю недавно построенную dll и старую с другой машины.
Если я собираю эту dll на том же ПК, у меня нет этой разницы.
Итак, вопросы:
Что означает эта шестнадцатеричная часть в искаженном имени? Почему эта часть шестнадцатеричного числа отличается в некоторых случаях? Как я могу скомпилировать этот проект, чтобы эти имена были одинаковыми.