Базовый адрес ЕХЕ-файла

Тема в разделе "WASM.BEGINNERS", создана пользователем K123, 13 дек 2005.

  1. K123

    K123 New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2005
    Сообщения:
    4
    Поскажите, пожалуйста, в каких случаях ЕХЕ-файл будет загружен по адресу, отличным от базового адреса (ImageBase), указанного в PE заголовке!
     
  2. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    EXE, пожалуй, ни в каких. Перемещение базы происходит в том случае, если по указанному адресу уже что-то лежит, т.е. память выделена под другой образ. В случае с Dll это случается часто, т.к. Dll обычно загружается множество и у них могут совпасть базовые адреса или они могут перекрыть друг друга, а EXE получает адресное пространство чистым, так что в пределах дозволенного диапазона загрузке не может ничего помешать. В литературе говорят, что такой случай, когда по адресу загрузки уже что-то лежит, возможен теоретически, но лично я никогда не сталкивался.

    Если, вдруг, такое случится, то, скорее всего, образ не будет загружен. В Dll есть специальная таблица релокации, которая корректирует все адреса, если модуль грузится не по указанному адресу, а в Exe эту таблицу обычно никто не делает и, следовательно, адреса не будут скорректированы.
     
  3. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    n0p

    Когда его загрузят через LoadLibrary :)
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    В случае если базовый адрес записанный в заголовке уже занят, такое

    имеет место быть в win98 с exe собранными с Image Base < 0x400000
     
  5. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    IceStudent

    И какому молодцу придет в голову грузить exe через LoadLibrary? :)

    Хотя, интересная тема.. Сделать в ехе директорию экспорта, наэкспортить функций всяких. Имеем динамическую библиотеку с возможностью самодостаточного запуска. Основной код ехе делает какие-то простенькие вещи через свои функции, а любой сторонний разработчик может использовать эти функции в своих прогах. Один минус - куча лишнего кода. :)
     
  6. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    n0p

    Когда кому-то захочется выдрать оттуда ресурсы, например. Или ещё чего.





    А здесь уже пробегала такая тема. И пример кода был.