Метаморфизм?

Тема в разделе "WASM.ZEN", создана пользователем pawa, 16 ноя 2006.

  1. pawa

    pawa New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2006
    Сообщения:
    2
    Здравствуйте.
    Родилась идея создания метаморфного движка.

    Пусть у нас есть накоторый исполняемый код. Пусть мы умеем заменять одну инструкцию на эквивалент, то есть реализован кодоэмулятор/дизассемблер. Например, инструкцию mov eax,4 заменяем на push 4 / pop eax. Основная проблема, возникающая при этом - пересчет адресов переходов и данных.
    Предлагаемое решение:
    - замена относительных адресов абсолютными
    - пересчет переходов вперед на необработанный код:
    Запоминаем данную команду перехода, при обработке последующих команд, возвращаеся к запомненной позиции и увеличиваем целевой адрес на разницу размеров команды до и после обработки.
    - пересчет переходов назад, в обработанный код:
    заводим таблицу вида:
    -=адрес команды в исходной программе | смещение до текущей обрабатываемой командой с учетом изменения размера команд=-

    Точнее, во вторую позицию пишется разница размеров. Например, была у нас 5-ти байтная команда, заменили ее на 8-ми байтную. В нужный элемент таблицы довавляем разницу, то есть 3 байта. Таблица включает все обработанные команды. Дойдя до команды перехода назад, извлекаем из нее целевой адрес, смотрим соответствующий элемент таблицы, складываем и получаем новую каманды перехода.

    с незначительными изменениями, алгоритм подходит и для пересчета адресов операндов в памяти.

    Теоретически, эта штука должна работать. Или я чего-то не понимаю в этом мире...
     
  2. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    А собственно в чём вопрос-то. Работать будет.
     
  3. pawa

    pawa New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2006
    Сообщения:
    2
    Вопрос в том, стоит ли браться за реализацию. Может, кто подобным занимался, какие подводные камни обнаружил.
     
  4. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    Обычная линковка, никаких таблиц не нужно.
     
  5. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    А тебе это надо? Если надо-занимайся.