Заставить MASM думать про другой адрес.

Тема в разделе "WASM.ASSEMBLER", создана пользователем Desliner, 6 фев 2009.

  1. TermoSINteZ

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

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Desliner
    В том то и дело, что заставив MASM задать процедуре Адрес ХУZ вы сможете. создав смещение + ImageBase настроить как вам советует leo. Но загрузчику винды чихать. В 1 прекрасный день он вам скажет "Какого я буду выеживаться. Загружу как мне вздумается". И ваша привязка уже не имеет никакого смысла.
    Подумайте над этим.
     
  2. Desliner

    Desliner New Member

    Публикаций:
    0
    Регистрация:
    5 фев 2009
    Сообщения:
    23
    Адрес:
    Heaven
    TermoSINteZ
    При отсутсвии релоков загрузчик винды обязан грузить образ по ImageBase. Если туда загрузить невозможно - образ загружен не будет.


    Итак, у меня остался один маленький вопрос: bin файл и MASM, возможно ли такое?
     
  3. TermoSINteZ

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

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Desliner
    Вот именно. При отсутствии не загрузит и оно вам надо?
    Вроде масм линкер не умеет делать bin файлы. Компилятор тока obj штампует )
     
  4. Desliner

    Desliner New Member

    Публикаций:
    0
    Регистрация:
    5 фев 2009
    Сообщения:
    23
    Адрес:
    Heaven
    TermoSINteZ
    Надо. А Вы не задавались вопросом, почему простые exe, которые создаются MASMовским линкером, не имеют релоков?
     
  5. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    наверное потому, что они там вообще не нужны. Но тут не тот случай. а насчет .use32 извиняюсь. попутал (давно за TASM и MASM не брался, все больше как-то FASM) с .X86 где X - желаемая платформа, но думаю у Вас и так .386P как минимум. кстати почему Вам не понравилась директива ORG
    Код (Text):
    1. org 0
    2. proc p
    3. ret
    4. endp p
    тогда call p будет скомпилировано в call 0
     
  6. Desliner

    Desliner New Member

    Публикаций:
    0
    Регистрация:
    5 фев 2009
    Сообщения:
    23
    Адрес:
    Heaven
    max7C4
    Директивой org задается RVA внутри текущей секции кода, а это не совсем то, что нужно.

    Например, следующий код
    Код (Text):
    1. p1 proc
    2.   call p2
    3.   ret
    4. p1 endp
    5.  
    6. org 401000h
    7.  
    8. p2 proc
    9.   ret
    10. p2 endp
    скомпилируется так:
    Код (Text):
    1. 00401000  | CALL 00802000 ;CALL $+0040100
    2. 00401005  | RETN
    3.  
    4. 00802000  | RETN
    Даже, грубо говоря, org не только заставляет компилятор думать, что код по другому адресу, но и помещает его по этому самому адресу, который задается относительно начала секции.
     
  7. V1lko

    V1lko New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    53
    Пипец, по моему автор сам создаёт себе гемор :)
     
  8. Desliner

    Desliner New Member

    Публикаций:
    0
    Регистрация:
    5 фев 2009
    Сообщения:
    23
    Адрес:
    Heaven
    V1lko
    А Вам не кажется, что мой гемор, как и Ваше имхо, темы не касаются. Не можете ничего сказать по теме - лучше промолчите.