2012-03-15 2 views
1

Моей средой является Linux CentOS 6.2. И у меня есть система управления версиями, такая как svn/hg/git и т. Д. Мой исходный код - C/C++.Как я могу запросить версию исходного кода двоичного кода

Я хочу проверить двоичный файл сборки, чтобы сохранить, какая бинарная версия будет выпущена клиенту.

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

Возможно ли, какие трюки я должен соблюдать?

Я видел, как некоторые исполняемые файлы отображают ревизию при выполнении с параметром -version. Но мне интересно, как предотвратить запись неправильной строки -версии в исполняемый файл.

Если я сохраню файл md5.txt и зарегистрирую его вместо проверки в двоичном формате. Как я могу убедиться, что смогу снова создать тот же исполняемый файл md5?

К сожалению, для очистки мой вопрос и предотвращения еще один неожиданный ответ, я предпочитаю ответ, как:

  1. Держите md5sum.txt в ВСМ, когда выпуск новой версии пользователю.
  2. Храните двоичный файл отдельно от вашего SCM.
  3. Для восстановления же md5sum бинарного вы должны убедиться, что символ
    • записи в бинарный код, когда делают (например, с помощью -DVERSION = «1.x»)
    • показать VERSION строку пользователю
    • удалить все $ Id, что позволяет вашему SCM работать медленнее.
    • держать же CPU & OS & компилятор & библиотеки среды
    • ...
+10

не проверять в двоичных файлах , Нет, просто нет. –

+1

Вам не нужно проверять двоичный файл. Если вы ДОЛЖНЫ записать что-либо, просто проверьте контрольные суммы MD5 или SHA1 (в формате ASCII). –

+0

И если вы * делаете * проверяете двоичные файлы, зачем вам проверять двоичный файл, который построен из чего-либо другого, кроме исходного дерева, в котором двоичный файл проверяется рядом? Если вы спросите систему управления версиями, какая версия последней модифицировала двоичный файл, и проверьте эту ревизию, вы должны быть уверены, что она содержит код, из которого был создан двоичный файл. – Wyzard

ответ

0

Является ли это исполняемый файл или разделяемую библиотеку? Если последний, вы можете экспортировать функцию, которая вернет версию (номер, строку, ваш выбор). Затем dlopen(), dlsym() и выполните функцию.

Для исполняемых двоичных файлов ELF вы можете внедрить некоторые данные в двоичный файл, который можно запросить с помощью утилиты «nm».

2
  1. Создание строк в файле .cpp, как таким образом:

    static const char version[] = "@(#) $Id$";

    где $ Id $ получается из SVN

  2. Используйте , что команда (смотрите страницу руководства) , Он получит эти строки из двоичного файла, чтобы вы могли проверить.
+0

Использует ли '@ (#)' что-нибудь еще, кроме того, что он является шаблоном для поиска для hexdumper? –

+0

Я использовал ** что ** команда на SunOS, но это не стандартная команда linux. И эта технология может позволить двоичным разным даже тогда, когда исходный код просто перемещается из repository_A в repository_B. –

0

Если вы будете использовать Subversion, SvnRev будет делать большую часть работы для вас (не md5 в РЕПО, источники умалчивают репо, бинарный - ресурс с ревизией-ID)

Для Mercurial, вы можете получить представление для версия жала из VersioningWithMake вики, и для того, чтобы получить строку как результат мерзавца описания, вместо простого шаблона {узла короткометражки} для HGVERSION вы можете использовать что-то, как {latesttag}+{latesttagdistance}:{node|short}, показывая (пример) 1.3+11:8a226f0f99aa

Смежные вопросы