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

Discussion in 'WASM.BEGINNERS' started by K123, Dec 13, 2005.

  1. K123

    K123 New Member

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

    n0p 10010000b

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

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

    IceStudent Active Member

    Blog Posts:
    0
    Joined:
    Oct 2, 2003
    Messages:
    4,300
    Location:
    Ukraine
    n0p

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

    Asterix New Member

    Blog Posts:
    0
    Joined:
    Feb 25, 2003
    Messages:
    3,576
    В случае если базовый адрес записанный в заголовке уже занят, такое

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

    n0p 10010000b

    Blog Posts:
    0
    Joined:
    May 7, 2003
    Messages:
    256
    Location:
    Новосиbeerск
    IceStudent

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

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

    IceStudent Active Member

    Blog Posts:
    0
    Joined:
    Oct 2, 2003
    Messages:
    4,300
    Location:
    Ukraine
    n0p

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





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