Идентификация условных переходов.

Тема в разделе "WASM.RESEARCH", создана пользователем Slav, 11 мар 2005.

  1. Slav

    Slav New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2005
    Сообщения:
    6
    Задача заключается в следующем. Необходимо в программном коде идентифицировать все условные и безусловные переходы. Вдобавок к этому необходимо определять адрес перехода. Подскажите можно ли определить всё это по сигнатурам или придётся писать подобие дизассемблера.
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Допустим 74 это одна из сотни сигнатур переходов
    Код (Text):
    1. 00404488 | 8379 74 0E | CMP DWORD PTR [ECX+74],0E
    2. 0040448C | 74 0E      | JE SHORT 0040449C
    Что делать в таком случае?
     
  3. Slav

    Slav New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2005
    Сообщения:
    6
    Придётся писать дизассемблер?
     
  4. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Придется писать трейсер :)
     
  5. Slav

    Slav New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2005
    Сообщения:
    6
    Пример с короткими переходами ясен. Как измениться ситуация если необходимо отслеживать только те переходы, которые выходят за пределы 4Кб?
     
  6. Dr.Golova

    Dr.Golova New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2002
    Сообщения:
    348
    > Допустим 74 это одна из сотни сигнатур переходов



    Банчи x86 определаются примерно пятью опкодами (с масками), а вот чтобы отбросить все остальные команды естесно придется писать дизассемблер. Сигнатуру на один байт не особо положишь =)
     
  7. Slav

    Slav New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2005
    Сообщения:
    6
    А есть готовые примеры движков? Что-то колпаться влом, да и время поджимает :)
     
  8. captain cobalt

    captain cobalt New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2003
    Сообщения:
    222
    Адрес:
    /ru/perm
    Slav

    > <font color="gray]и безусловные переходы. Вдобавок к этому необходимо определять адрес перехода.</font><!--color-->



    Существуют также косвенные переходы - по указателю. Например, вызов виртуальной функции через vtbl. Для них потребуется вычисление потока данных, чтобы узнать, куда может указывать указатель. А извращенцы вирусописатели могут вычслять указатели с помощью SSE2 или 3DNow!, на худой конец, FPU. ;)