oryx_and_crake (
oryx_and_crake) wrote2005-12-01 11:05 pm
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Спасите, помогите, умираю (сравнение бинарных файлов с игнорированием 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
впрочем, это уже не имеет никакого значения.
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
впрочем, это уже не имеет никакого значения.
no subject
тогда пишем некий не особо хитрый код (потребуется проход вперед и откат на несколько байцтов назад с последующим возвращением вперед в местах несовпадения), который проходит по фалам по байтно и выписывает в 2 лога несовпавшие байты (и их адреса). Далее анализируются полученные логи. Да, это геморрой, я знаю :)
Спасибо, конечно, но...
no subject
no subject
он состоит из одного байта?
с большой долей вероятности если все совпадает, кроме различий в этом номере (да еще и его адрес в файлах совпадает) то это уж никак не минус или плюс
no subject
no subject
no subject
Если этот и подобные ему вопросы оставить за кадром, то мы все будем заниматься всякой ерундой, не понимая, зачем и почему мы это делаем.
Системы контроля версий для того и существуют, чтоб подобные задачи не ставились никогда.
Начальника, поставившего подобную задачу, а также подчиненного, начавшего ее решать, вместо того, чтоб объяснить начальнику, почему это делать не следует, я предупреждал бы о неполном служебном соответствии. На первый раз.
no subject
no subject
no subject
(удалилась обдумывать открывшиеся перспективы)
no subject
no subject
no subject
ЗЫ: Никогда бы не подумал, что вы к программированию отношение имеете :)
no subject
no subject
Это явно какие-то внутренние дела самого компилятора, и вот я нутром чую, что это номер релиза (ну как там - макроверсия.микроверсия.билд.релиз), а доказать не могу. Никаких стандартных методов достать эту цифру через известные структуры файла у меня нету.
no subject
no subject
no subject