C компилятор компилит каждый раз разный бинарник

Тема в разделе "WASM.BEGINNERS", создана пользователем ololoe, 7 ноя 2009.

  1. ololoe

    ololoe New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2009
    Сообщения:
    17
    Компилю helloworld - каждый раз отличаются несколько байтов (или даже не несколько). Почему это так?
     
  2. make

    make New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2009
    Сообщения:
    59
    timestamp?
     
  3. ololoe

    ololoe New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2009
    Сообщения:
    17
    Ну вот пример.
     
  4. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    ololoe
    может компилятор добавляет время компиляции?
     
  5. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Бинарники действительно разные, отличаются timestamp и в секции кода тоже различия. Может, исходники тоже разные? Мы же их не видим...
     
  6. ololoe

    ololoe New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2009
    Сообщения:
    17
    Исходники одинаковые, скомпильте сами helloworld пару раз, например, lcc32.

    А что за Timestamp? Нафига он там нужен?
     
  7. ololoe

    ololoe New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2009
    Сообщения:
    17
    Блин, как тут изменить сообщение?

    Если исходник разный, то почему размер exe один и тот же?
     
  8. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Информация о времени, когда был собран данный PE-файл. Это значение равно количеству секунд прошедших с 1 января 1970 года до времени создания файла.

    Тут посмотри
    http://www.wasm.ru/article.php?article=green2red02#_Toc100906476
     
  9. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Потому, что там всё выравнивается на величину, кратную 200.

    Если у тебя по факту исходник 150 байтов, то на диске он займёт 200, 50 байтов не нужные, и они скорее всего будут заполнены нулями, врать не буду.

    Если он занимает 157 или 182, то тоже займёт 200 байтов.

    А если занимает 210, то займёт 400

    Величина 200 это файловое выравнивание, кажись она константа. В общем, иди по ссылке и изучай.
    Хочешь, тут посмотри
    http://www.wasm.ru/forum/viewtopic.php?id=29767&p=2

    Сообщение номер 28
     
  10. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Ой. не исходник. а бинарник. Никак тут не изменить сообщение.
     
  11. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    amvoz
    FileAlignment указывается в заголовке и может находиться в пределах между 4h и 10000h (насчёт верхней границы не уверен), включая границы. Подробно ограничения этих полей отлично описал diamond вот здесь:
    http://www.wasm.ru/forum/viewtopic.php?id=25517 .
     
  12. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    release2 и release3 отличаются только timestamp-ом. release содержит лишние команды

    Код (Text):
    1. .00401242: B910000000                   mov         ecx,000000010
    2. .00401247: 49                           dec         ecx
    3. .00401248: C7048C5A5AFAFF               mov         d,[esp][ecx]*4,0FFFA5A5A ;
    4. .0040124F: 75F6                         jnz        .000401247 --↑2