fix import table, export, relocs and etc.

Тема в разделе "WASM.BEGINNERS", создана пользователем mz80, 25 авг 2010.

  1. mz80

    mz80 New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2010
    Сообщения:
    10
    Приветствую,
    Такой вопрос. Пишу для себя простенький криптор, но есть одно непонимание. Беру exe`шник соединяю его своим стубом(кидаю его в ресурсы). Стуб при запуске парсит ресурсы находит там exe`шник, выделяет под него память в виртуальном адресном пространстве, кидает в память всё по порядку (сначала хедеры, потом по нужным адресам секции) и пытается запустить. Не получается :)
    Как я понимаю надо ещё пофиксить таблицы импорта, экспорта, ресурсов ну и релоки. С релоками более менее понятно, там надо вычислить дельту и пересчитать их всех. Немного непонятно по поводу импорта и т.д., что там фиксить. Хотя можно проблема в другом!?
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    как это что фиксить? таблицу импорта... в директории IMAGE_DIRECTORY_ENTRY_IMPORT лежат подряд структуры IMAGE_IMPORT_DESCRIPTOR, в нем поле Name определяет смещение имени библиотеки, относительно базового адреса... для каждого имени библиотеки перечисляем функции, которые из нее импортируются (поле FirstThunk или OriginalFirstThunk в зависимости от поля TimeDateStamp)... эти смещения указывают либо на имена функций, либо на ординалы... получаем адреса функций и подставляем вместо смещений/ординалов... в интернете куча исходных кодов, как это сделать...

    мне вообще кажется, что настройка релоков посложнее будет, их там несколько типов и тд)))

    проблему надо отладчиком смотреть...
     
  3. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    mz80
    Насчет импорта, думаю, стоит почитать статьи, но вкратце надо править IAT, вписав туда реальные адреса ф-ий, которые надо либо получить самому, либо с помощью ф-ии GetProcAddress. Что касается релокации -- не все исполняемые ее поддерживают, поэтому необходимо, чтобы базовый адрес, прописанный в заголовке целевого исполняемого, был свободен.
     
  4. mz80

    mz80 New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2010
    Сообщения:
    10
    спасибо! )
    с экспортом и ресурсами заморочки есть?
     
  5. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    Экспорт обычно присутствует в dll файлах, заморочки будут если exe использующий эту dll импортирует из нее функции статически. Загрузчик просто не загрузит такой exe, т.к. не обнаружит экспортируемых функций. Если же функции из dll вызываются динамически, то проблем быть не должно.