Использование инлайн define byte/word/dword в C, базонезависимый код?

Тема в разделе "LANGS.C", создана пользователем Arisu, 8 ноя 2008.

  1. Arisu

    Arisu Алиса Селезнёва

    Публикаций:
    0
    Регистрация:
    10 апр 2007
    Сообщения:
    89
    Мучает меня последнее время проблема: очень хочется иметь данные посреди Цэ кода но каких-то внятных механизмов я не знаю.

    В асме всё просто: написал dd посреди кода и делай с ним что угодно и никуда он оттуда не денется.
    А в Си злобный компилер создаёт всякие секции кода и прочую ересь вроде создания переходов с адресом не относительно инструкции а относительно некой базы.
    Вобщем всеми силами мешает делать базонезависимый код.

    Помучал гугл некоторое время, но ничего интересного не нашел.

    Может кто-нибудь подскажет не шибко шаманские способы создания данных посреди кода в Си, пусть и с использованием встроенного асма?
    Ну и за одно подскажите может быть какие-нибудь команды компилера/прекомпилера которые насильно заставляют компилер генерировать код с ссылками относительно инструкций.

    Лучше на примере microsoft C 98, если это конечно не фантастика )
     
  2. Clear_Energy

    Clear_Energy Алексей

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    375
    Я могу ошибаться, но если с MERGE директивой линкера поизвращаться?
     
  3. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    Arisu
    не надо пытаться писать на Си, как на асме. Если нужен асм, то пиши на нем.
     
  4. only

    only New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2008
    Сообщения:
    147
    Arisu
    1) Так например.

    Код (Text):
    1. //code flow
    2. //...
    3. SomeData:
    4. __asm{jmp SomeDataEnds};
    5. __asm{_emit x1};
    6. ...
    7. __asm{_emit xn};
    8. SomeDataEnds:
    9. //code flow
    10. //...
    2) По форуму поиск.
     
  5. only

    only New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2008
    Сообщения:
    147
    Ну почему же. Очень даже неплохо получается.
    И вникаешь лучше в генерируемый компилятором код.
     
  6. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Arisu
    про MSVC 6 не знаю, но в овС есть опция такая - помещать константы в код.
     
  7. Arisu

    Arisu Алиса Селезнёва

    Публикаций:
    0
    Регистрация:
    10 апр 2007
    Сообщения:
    89
    Clear_Energy
    посмотрим

    meduza
    у меня часто случаются случаи, когда из за лишней "дубовости" Си приходится блин создавать целый отдельный модуль в котором только одна функция на асме с гулькин нос. Ну по моему это просто некрасиво.

    _basmp_
    а название опции не подскажешь?

    only
    ок попробую.
     
  8. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    На практике это, как правило, означает одно из двух
    - человек плохо знает С
    - человек пытается применять С для вещей, для которых С не предназначен. Что, вобщем, сводится к первому случаю.
     
  9. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Arisu
     
  10. Arisu

    Arisu Алиса Селезнёва

    Публикаций:
    0
    Регистрация:
    10 апр 2007
    Сообщения:
    89
    _basmp_
    огромное спасибо.