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

Discussion in 'LANGS.C' started by sl0n, Dec 9, 2010.

  1. sl0n

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

    Blog Posts:
    0
    Joined:
    Sep 26, 2003
    Messages:
    701
    Вот народ подскажите есть проект он рекампилится по разному какую прагму добавить чтобы ентрипоинт был всегда один и тот же вне зависимости от изменений проекта, пересекающихся параграфов нет
     
  2. sl0n

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

    Blog Posts:
    0
    Joined:
    Sep 26, 2003
    Messages:
    701
    имеется ввиду rva entrypoint
     
  3. dtt

    dtt New Member

    Blog Posts:
    0
    Joined:
    Oct 9, 2010
    Messages:
    26
    может если установить functions order и поставить мэйн-функцию первой, то получится?
     
  4. KeSqueer

    KeSqueer Сергей

    Blog Posts:
    0
    Joined:
    Jul 19, 2007
    Messages:
    1,183
    Location:
    Москва
    dtt
    Адрес main и точка входа разные адреса имеют
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Staff Member

    Blog Posts:
    2
    Joined:
    Jun 11, 2004
    Messages:
    3,568
    Location:
    Russia
    sl0n
    Имхо задача не имеет решения, если условие "рекампилится по разному".
    Потому, что компиль компилю рознь.
    Но если компиль один и тот же, то действительно, если зафиксировать ордер функций, есть вероятность, что RVA EP будет одной и той же.
    ИМХО
     
  6. Cr4sh

    Cr4sh New Member

    Blog Posts:
    0
    Joined:
    Apr 17, 2006
    Messages:
    668
    Если программу собрать без c-шного рантайма и указать опцию /ENTRY для линкера - то один и тот же.

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

    Rel Well-Known Member

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

    Dr.Golova New Member

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

    Rel Well-Known Member

    Blog Posts:
    2
    Joined:
    Dec 11, 2008
    Messages:
    5,317
    я может какой-то особенный, но у меня линкер пихает обжы в том порядке, в котором они добавлялись в проект, а не по алфавиту (студия 2008 и 2010)...
     
  10. sn0w

    sn0w Active Member

    Blog Posts:
    0
    Joined:
    Feb 27, 2010
    Messages:
    958
    #pragma comment(linker, "/ENTRY:name_of_func")
    #pragma comment(linker, "/BASE:0x12130000")

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

    KeSqueer Сергей

    Blog Posts:
    0
    Joined:
    Jul 19, 2007
    Messages:
    1,183
    Location:
    Москва
    sn0w
    база образа и точка входа вовсе не обязаны совпадать
     
  12. sn0w

    sn0w Active Member

    Blog Posts:
    0
    Joined:
    Feb 27, 2010
    Messages:
    958
    они и не будут совпадать - я говорю о том что вдруг по этой базе уже чтото выделено. библя какая например.
     
  13. Rel

    Rel Well-Known Member

    Blog Posts:
    2
    Joined:
    Dec 11, 2008
    Messages:
    5,317
    именно по этой причине есть стандартная ImageBase для exe-файлов... именно по этой причине dll-файлы обычно снабжены релоками... и потом, о чем мы говорим, если это не решает задачу:
    вне зависимости от фиксации базы, ведь:
     
  14. sl0n

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

    Blog Posts:
    0
    Joined:
    Sep 26, 2003
    Messages:
    701
    ээ тащемто это необходимо для драйвера забыл сказать раньше