Компиляция без привязки к базовому адресу

Тема в разделе "WASM.WIN32", создана пользователем vovka, 15 авг 2006.

  1. vovka

    vovka New Member

    Публикаций:
    0
    Регистрация:
    23 май 2006
    Сообщения:
    45
    Есть ли возможность скомпилировать программу, так чтобы
    её можно было запускать вне зависимости от того где она находится в памяти!

    Таблица релокаций должна отсутствовать (именно отсутствовать)!

    А вообще ещё хотел перенести после старта проги саму себя в другое место памяти и запустить!

    Посоветуйте!
    Про то что надо это или не надо лучше не говорите!
    Просто помогите! наставте!

    Спасибо!
     
  2. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    http://www.wasm.ru/article.php?article=green2red01 - кури раздел про дельта смещение :)
     
  3. BUGOR

    BUGOR New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2005
    Сообщения:
    44
    .....
     
  4. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Напиши программу на одних лишь относительных переходах - и будет тебе счастье. Я как-то лет 12 назад на Спектруме такую вымутил :)
     
  5. vovka

    vovka New Member

    Публикаций:
    0
    Регистрация:
    23 май 2006
    Сообщения:
    45
    А если пога на С++ (с асмом всё понятно)!
     
  6. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    vovka
    По-моему для С++ достаточно:
    не использовать глобальные/статические данные
    не использовать виртуальные ф-ции, виртуальные базовые классы, RTTI, EH
    не использовать табл. импорта (т.е. адреса АПИ получать явно)
    поместить весь код в одну секцию.
     
  7. vovka

    vovka New Member

    Публикаций:
    0
    Регистрация:
    23 май 2006
    Сообщения:
    45
    спасибо! опробую!
     
  8. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Никакие функции использовать нельзя, ведь call не может быть относительным.
     
  9. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Quantum
    Ф-ции юзать можно! Но через указатель получаемый в качестве аргумента ф-ции :)))
     
  10. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Quantum
    Может. Абсолютны только косвенные переходы (не считая, конечно, прямых межсегментных).
    Поэтому и нельзя использовать неявные косвенные вызовы т.е. виртуальные ф-ции и таблицу импорта.

    Вообще говоря есть и другие источники косвенных вызовов. Например компилятор может оптимизировать switch сведя его к вызову по таблице.