Детерминированные сборки в соответствии с Windows

Более быстрый способ с помощью регулярных выражений?

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;
}   
28
задан Eugene 20 April 2016 в 19:53
поделиться

3 ответа

Стандартизация путей сборки

Простым решением было бы стандартизировать ваши пути сборки, чтобы они всегда имели форму, например:

c:\buildXXXX

Затем, когда вы сравниваете, скажем, build0434 to build0398 , просто выполните предварительную обработку двоичного файла, чтобы изменить все вхождения build0434 на build0398 . Выберите шаблон, который, как вы знаете, вряд ли будет отображаться в вашем фактическом источнике / данных, за исключением тех строк, которые компилятор / компоновщик встраивает в PE.

Затем вы можете просто провести свой обычный анализ различий. Используя пути одинаковой длины, вы не будете перемещать какие-либо данные и вызывать ложные срабатывания.

Утилита Dumpbin

Другой совет - использовать dumpbin.exe (поставляется с MSVC). Используйте dumpbin / all , чтобы выгрузить все детали двоичного файла в текстовый / шестнадцатеричный дамп. для исполняемых файлов Win32, которые маскируют из различных полей метки времени сборки в оба файла при выполнении сравнить. Это позволяет два исполняемых файла файлы должны быть помечены как "почти идентичные" когда файлы действительно идентичны, за исключением времени, когда они были созданы ».

Однако похоже, что вы, возможно, уже делаете надмножество того, что делает bindiff.exe.

8
ответ дан 28 November 2019 в 03:51
поделиться

Вы пробовали дизассемблировать исполняемый файл и сравнивать дизассемблирование? Это должно удалить многие отвлекающие детали, которые вы упомянули, и упростить удаление других.

2
ответ дан 28 November 2019 в 03:51
поделиться

Есть ли способ заставить компилятор для использования относительных путей или обмануть его, думая, что путь не что это такое?

Это можно сделать двумя способами:

  1. Используйте команду subst.exe и сопоставьте букву диска с папкой сборки (это может быть ненадежно).
  2. Если subst.exe не t работать, затем создайте общие ресурсы для каждой из ваших папок сборки и используйте команду net use. Этот почти наверняка должен работать.

В любом случае вы собираетесь сопоставить и повторно использовать одну и ту же букву диска для папки перед запуском конкретной сборки, чтобы путь выглядел идентичным компилятору.

3
ответ дан 28 November 2019 в 03:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: