Помогите новичку с relocations

Тема в разделе "WASM.RESEARCH", создана пользователем yura_lvk, 9 июл 2008.

  1. yura_lvk

    yura_lvk New Member

    Публикаций:
    0
    Регистрация:
    9 июл 2008
    Сообщения:
    2
    Помогите пожалуйста разобраться.
    Если я правильно понял документацию по формату PE,то PE-файл загружается по базовыму адресу, указанному в ImageBase. Если вдруг системный загрузчик не смог этого сделать, то грузимся куда удастся и адреса всех перемещаемых элементов пересчитываются. Так?

    Я делаю следующее:
    есть dll, у которой ImageBase = 0x10000000 и она нормально работает. В HIEW меняю ей ImageBase на 0х20000000 и
    при загрузке она падает. Сделал в Visual'e LoadLibrary (с GlobalFlag'ом равным SHOW_LDR_SNAPS) и получил что инструкция по адресу 0х2000f80e ( mov ) обратилась по недоступному адресу 0х1003027f. Адрес 0х1003027f - это перемещаемый элемент! А теперь вопрос, почему его адрес не пересчитался, и как заставить загрузчик сделать это? И вообще как загрузить dll по другому базовому адресу, чтоб проверить ее работоспособность?
     
  2. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    Поменять ImageBase в заголовке недостаточно. Надо пробеждать еще по всем релокейшинам и ко всем элементам В ФАЙЛЕ (!!!) добавить разницу между новой и старой ImageBase (т.е. фактически повторить все то, что делает обычный загрузчик при загрузке по новой ImageBase).
     
  3. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Другими словами все адреса\указатели в коде соответствуют ImageBase, указанной в PE. Поэтому если длл грузится по ImageBase, указанной в PE, то загрузчик их не пересчитывает и "заставить его сделать это" невозможно. Поэтому для изменения базы нужно либо самому пересчитать все адреса (можно заюзать ф-ю ReBaseImage), либо воспользоваться готовыми утилитами типа rebase.exe
     
  4. yura_lvk

    yura_lvk New Member

    Публикаций:
    0
    Регистрация:
    9 июл 2008
    Сообщения:
    2
    Спасибо большое dermatolog и leo, теперь понятно как сия штука работает :)
     
  5. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    yura_lvk
    К сож. по жизни встречаются и файлы с пустой таблицей релоков.