oryx_and_crake: (Default)
oryx_and_crake ([personal profile] oryx_and_crake) wrote2005-12-01 11:05 pm

Спасите, помогите, умираю (сравнение бинарных файлов с игнорированием timestamps)

Задача - сравнить два .ехе-файла, скомпилированные с одного проекта с одинаковыми настройками (все вообще одинаковое), но с некоторым промежутком времени, и, возможно, на разных машинах. Гадость заключается в том, что .exe-файлы при этом получаются чуточку разные. Подлая Вижуал Студия 2003 суёт туда timestamps где ни попадя и еще в одном месте прибавляет единичку с каждой последующей компиляцией проекта. Т.е. файлы получаются формально разными, хотя на самом деле они эквивалентны. Таймстемпы я кой-как победю, а вот с этим автоматическим прибавлением единицы я никак справиться не могу. По совету MSDN поставила статический номер версии в свойствах проекта - не помогает. Спасите. Буду немеряно благодарна. Хотя бы скажите, что это за переменная и как ее достать из формата PE/COFF.

P.S. В Гугль не посылать, windiff, bindiff, comp и dumpbin /rawdata с последующим fc /b не предлагать - пробовали, хуже.
P.P.S. Философский вопрос "на кой черт это надо, если файл изменился, то он и так изменился" прошу оставить за кадром. Это надо для дела.

(кросспост всюду, куда только можно)

UPDATE кому интересно: эта автоматически прибавляемая единица относится к переменной под названием Age, которая является составной частью Debug Directory в формате Codeview RSDS. Она имеет приблизительно следующую структуру:

CodeView format: RSDS

Signature: {d0b024a8-5829-424e-b997-66cc1626a1c2} Age: 1

PdbFile: d:\depot\bas\640_rel\fes_640_REL\src\opt\NTintel\GridView.pdb

впрочем, это уже не имеет никакого значения.

[identity profile] zayeb.livejournal.com 2005-12-02 05:10 am (UTC)(link)
что значит сравнить? убедиться, что кроме таймстемпов и этой единички все остальное одинаково?
тогда пишем некий не особо хитрый код (потребуется проход вперед и откат на несколько байцтов назад с последующим возвращением вперед в местах несовпадения), который проходит по фалам по байтно и выписывает в 2 лога несовпавшие байты (и их адреса). Далее анализируются полученные логи. Да, это геморрой, я знаю :)

[identity profile] zayeb.livejournal.com 2005-12-02 05:23 am (UTC)(link)
сколько раз этот номер версии встречается?
он состоит из одного байта?
с большой долей вероятности если все совпадает, кроме различий в этом номере (да еще и его адрес в файлах совпадает) то это уж никак не минус или плюс

[identity profile] b0bb.livejournal.com 2005-12-02 03:40 pm (UTC)(link)
> P.P.S. Философский вопрос "на кой черт это надо, если файл изменился, то он и так изменился" прошу оставить за кадром. Это надо для дела.

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

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

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

[identity profile] b0bb.livejournal.com 2005-12-03 01:19 am (UTC)(link)
Тебе на слово я могу чему угодно поверить, а смысл?

[identity profile] vsopvs.livejournal.com 2005-12-02 04:08 pm (UTC)(link)
если вопрос еще не решен, и вы желаете эти файлы мне переправить тем или иным способом, я мог бы с ними поработать и дать вам перечень различий, если таковые обнаружатся (кроме версий и timestamps) В выходные мог бы ...

[identity profile] vsopvs.livejournal.com 2005-12-02 04:46 pm (UTC)(link)
я не собирался сравнивать вручную :) я имел в виду что-то вроде скрипта на Perl или код на C++, чтобы можно было найти и сравнить только то, что ему не соответствует.

ЗЫ: Никогда бы не подумал, что вы к программированию отношение имеете :)

[identity profile] vsopvs.livejournal.com 2005-12-02 05:15 pm (UTC)(link)
найти pattern и сравнить

[identity profile] zayeb.livejournal.com 2005-12-03 08:23 am (UTC)(link)
вот чтобы не возиться с такими проблемами 4 года назад ушел от программирования под винду. был счастлив почти 4 года. сейчас взялся за новый проект на платформе windows CE... ирония судьбы