Как ентрипоинт сделать статичным

Тема в разделе "LANGS.C", создана пользователем sl0n, 9 дек 2010.

  1. sl0n

    sl0n Мамонт дзена **

    Публикаций:
    0
    Регистрация:
    26 сен 2003
    Сообщения:
    703
    Вот народ подскажите есть проект он рекампилится по разному какую прагму добавить чтобы ентрипоинт был всегда один и тот же вне зависимости от изменений проекта, пересекающихся параграфов нет
     
  2. sl0n

    sl0n Мамонт дзена **

    Публикаций:
    0
    Регистрация:
    26 сен 2003
    Сообщения:
    703
    имеется ввиду rva entrypoint
     
  3. dtt

    dtt New Member

    Публикаций:
    0
    Регистрация:
    9 окт 2010
    Сообщения:
    26
    может если установить functions order и поставить мэйн-функцию первой, то получится?
     
  4. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    dtt
    Адрес main и точка входа разные адреса имеют
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    sl0n
    Имхо задача не имеет решения, если условие "рекампилится по разному".
    Потому, что компиль компилю рознь.
    Но если компиль один и тот же, то действительно, если зафиксировать ордер функций, есть вероятность, что RVA EP будет одной и той же.
    ИМХО
     
  6. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    Если программу собрать без c-шного рантайма и указать опцию /ENTRY для линкера - то один и тот же.

    Ещё вариант (если лень возится с /ORDER и очередностью функций): повесить на post build event программу, которая будет в заведомо известное место (заголовок, начало первой секции, итд.) писать jmp на OEP, и RVA точки входа в загловке переписывать адресом этого джампа.
     
  7. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    вообще мне кажется, что надежно это можно сделать только /ORDER... /ENTRY привяжет точку входа к имени функции, он не фиксирует ее RVA... можно канеш вынести EntryPoint в отдельну секцию и каким-нить образом поставить ее до всех остальных секций, но это - бредовое решение... можно с помощью ассемблера сделать стаб в самом начале секции кода, но надо, чтобы obj-файл этого стаба попадал на линкер первым... а из этого стаба уже вызывать оригинальную точку входа или CRT-точку входа... я делал такую тему с помощью yasm'а...
     
  8. Dr.Golova

    Dr.Golova New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2002
    Сообщения:
    348
    мелкомягкий линкер собирает обжухи по имени, так что называй свой модуль "__!!!_module", и он будет в начале сакции кода. главное выгнать оттуда всякие баунд-импорты и прочую ересь =)
     
  9. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    я может какой-то особенный, но у меня линкер пихает обжы в том порядке, в котором они добавлялись в проект, а не по алфавиту (студия 2008 и 2010)...
     
  10. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    958
    #pragma comment(linker, "/ENTRY:name_of_func")
    #pragma comment(linker, "/BASE:0x12130000")

    минус 1 в том что по этому адресу не должно ничего находиться - ибо чревато крахом
    минус 2 - инита црт не произойдет
     
  11. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    sn0w
    база образа и точка входа вовсе не обязаны совпадать
     
  12. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    958
    они и не будут совпадать - я говорю о том что вдруг по этой базе уже чтото выделено. библя какая например.
     
  13. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    именно по этой причине есть стандартная ImageBase для exe-файлов... именно по этой причине dll-файлы обычно снабжены релоками... и потом, о чем мы говорим, если это не решает задачу:
    вне зависимости от фиксации базы, ведь:
     
  14. sl0n

    sl0n Мамонт дзена **

    Публикаций:
    0
    Регистрация:
    26 сен 2003
    Сообщения:
    703
    ээ тащемто это необходимо для драйвера забыл сказать раньше