Это затронет только небольшую часть пользователей, но я бы хотел, чтобы это было документировано для этой небольшой части. Из-за этой проблемы этот член этой маленькой горстки потратил 6 часов на устранение неполадок с работающим PHP-почтовым скриптом.
Если вы собираетесь в университет, в котором работает XAMPP с сайта www.AceITLab.com, вы должны знать, что наш профессор не сказал нам: брандмауэр AceITLab (а не брандмауэр Windows) блокирует MercuryMail в XAMPP , Вам придется использовать альтернативный почтовый клиент, груша работает на нас. Вам нужно будет отправить учетную запись Gmail с низкими настройками безопасности.
Да, я знаю, это абсолютно бесполезно для электронной почты реального мира. Однако, из того, что я видел, академические настройки и реальный мир часто имеют очень мало общего.
Я решил это до некоторой степени.
В настоящее время у нас есть система сборки, которая гарантирует, что все новые сборки находятся на пути постоянной длины (builds / 001, builds / 002 и т. д.), что позволяет избежать сдвигов в макете PE. После сборки инструмент сравнивает старые и новые двоичные файлы, игнорируя соответствующие поля PE и другие местоположения с известными поверхностными изменениями. Он также выполняет некоторые простые эвристики для обнаружения динамических игнорируемых изменений. Вот полный список вещей, которые следует игнорировать:
. Через какое-то время компоновщик сделает некоторые разделы PE более крупными, не выбрасывая что-нибудь еще из выравнивания. Похоже, что он перемещает границу раздела внутри прокладки - это все равно нули, но из-за этого я получаю двоичные файлы с 1 байтовой разницей.
UPDATE: мы недавно открыли инструмент на GitHub . См. Раздел «Сравнение» в документации.
Есть ли способ заставить компилятор использовать относительные пути или обмануть его, думая, что путь не такой, какой он есть?
blockquote>У вас есть два способа сделать this:
- Используйте команду subst.exe и сопоставьте букву диска с папкой сборки (это может быть ненадежным).
- Если файл subst.exe не работает , затем создайте ресурсы для каждой из ваших папок сборки и используйте команду «net use».
В любом случае вы собираетесь отображать и повторно использовать одну и ту же букву диска для папки, прежде чем запускать определенную сборку, чтобы путь был идентичным компилятору.
Вы пытались разобрать исполняемый файл и сравнить разборку? Это должно удалить много отвлекающих деталей, которые вы упомянули, и сделать удаление других намного проще.
Простым решением будет стандартизация ваших путей сборки, поэтому они всегда имеют форму, например:
c:\buildXXXX
Затем, когда вы сравните, скажем, build0434 с build0398, просто препроцессор двоичный, чтобы изменить все вхождения build0434 в build0398. Выберите шаблон, который, как вы знаете, вряд ли появится в вашем фактическом источнике / данных, за исключением тех строк, которые компилятор / компоновщик встраивается в PE.
Тогда вы можете просто провести свой обычный анализ разницы. Используя одинаковые пути, вы не будете перемещать какие-либо данные и вызывать ложные срабатывания.
Еще один совет - использовать dumpbin.exe (поставляется с MSVC). Используйте dumpbin / all , чтобы сбрасывать все детали двоичного файла в текстовый / шестнадцатеричный дамп. Это может сделать более очевидным, чтобы увидеть, что / где меняется.
Например:
dumpbin /all program1.exe > program1.txt
dumpbin /all program2.exe > program2.txt
windiff program1.txt program2.txt
Или используйте свой любимый инструмент для обработки текста вместо Windiff.
Вы можете найти инструмент bindiff.exe от Microsoft, который можно получить здесь:
Инструменты поддержки Windows XP с пакетом обновления 2 (SP2)
Он имеет опцию / v, чтобы указать ему игнорировать определенные двоичные поля, такие как метки времени, контрольные суммы и т. д .:
«BinDiff использует специальную процедуру сравнения для Win32 исполняемые файлы, которые маскируют различные метки времени сборки в обоих файлах при выполнении сравнения. Это позволяет отмечать два исполняемых файла как «Near Identical», когда файлы действительно идентичны, за исключением того времени, когда они были созданы ».
blockquote>Однако, похоже, что вы уже делаете надмножество того, что делает bindiff.exe.