Задача заключается в следующем. Необходимо в программном коде идентифицировать все условные и безусловные переходы. Вдобавок к этому необходимо определять адрес перехода. Подскажите можно ли определить всё это по сигнатурам или придётся писать подобие дизассемблера.
Допустим 74 это одна из сотни сигнатур переходов Код (Text): 00404488 | 8379 74 0E | CMP DWORD PTR [ECX+74],0E 0040448C | 74 0E | JE SHORT 0040449C Что делать в таком случае?
Пример с короткими переходами ясен. Как измениться ситуация если необходимо отслеживать только те переходы, которые выходят за пределы 4Кб?
> Допустим 74 это одна из сотни сигнатур переходов Банчи x86 определаются примерно пятью опкодами (с масками), а вот чтобы отбросить все остальные команды естесно придется писать дизассемблер. Сигнатуру на один байт не особо положишь =)
Slav > <font color="gray]и безусловные переходы. Вдобавок к этому необходимо определять адрес перехода.</font><!--color--> Существуют также косвенные переходы - по указателю. Например, вызов виртуальной функции через vtbl. Для них потребуется вычисление потока данных, чтобы узнать, куда может указывать указатель. А извращенцы вирусописатели могут вычслять указатели с помощью SSE2 или 3DNow!, на худой конец, FPU.