Более быстрый способ с помощью регулярных выражений?
Number.prototype.toMonetaryString=function(){var n=this.toFixed(2),m;
// var=this.toFixed(2).replace(/\./,','); for comma separator
// with a space for thousands separator
while ((m=n.replace(/(\d)(\d\d\d)\b/g,'$1 $2'))!=n) n=m;
return m;
}
String.prototype.fromMonetaryToNumber=function(s){
return this.replace(/[^\d-]+/g,'')/100;
}
Простым решением было бы стандартизировать ваши пути сборки, чтобы они всегда имели форму, например:
c:\buildXXXX
Затем, когда вы сравниваете, скажем, build0434 to build0398 , просто выполните предварительную обработку двоичного файла, чтобы изменить все вхождения build0434 на build0398 . Выберите шаблон, который, как вы знаете, вряд ли будет отображаться в вашем фактическом источнике / данных, за исключением тех строк, которые компилятор / компоновщик встраивает в PE.
Затем вы можете просто провести свой обычный анализ различий. Используя пути одинаковой длины, вы не будете перемещать какие-либо данные и вызывать ложные срабатывания.
Другой совет - использовать dumpbin.exe (поставляется с MSVC). Используйте dumpbin / all , чтобы выгрузить все детали двоичного файла в текстовый / шестнадцатеричный дамп. для исполняемых файлов Win32, которые маскируют из различных полей метки времени сборки в оба файла при выполнении сравнить. Это позволяет два исполняемых файла файлы должны быть помечены как "почти идентичные" когда файлы действительно идентичны, за исключением времени, когда они были созданы ».
Однако похоже, что вы, возможно, уже делаете надмножество того, что делает bindiff.exe.
Вы пробовали дизассемблировать исполняемый файл и сравнивать дизассемблирование? Это должно удалить многие отвлекающие детали, которые вы упомянули, и упростить удаление других.
Есть ли способ заставить компилятор для использования относительных путей или обмануть его, думая, что путь не что это такое?
Это можно сделать двумя способами:
В любом случае вы собираетесь сопоставить и повторно использовать одну и ту же букву диска для папки перед запуском конкретной сборки, чтобы путь выглядел идентичным компилятору.