Поиск и замена

int findCmd(int addr, string cmds);

Поиск последовательности ассемблерных команд

Параметры
  • addr:

    • Стартовый адрес поиска.

  • cmds:

    • Строка, содержащая последовательность команд, которые необходимо найти поддерживаются такие шаблоны команд:

      ANY

      Любая команда

      JCC

      Любой условный переход (JE, JC, JNGE…)

      SETCC

      Любой условный набор байтов (SETE, SETC, SETNGE…)

      CMOVCC

      Любое условное смещение (CMOVE, CMOVC, CMOVNGE…)

      и параметров:

      R8

      Любой 8-битный регистр (AL, BL, CL, DL, AH, BH, CH, DH)

      R16

      Любой 16-битный регистр (AX, BX, CX, DX, SP, BP, SI, DI) R32,Любой 32-битный регистр (EAX

      FPU

      Любой FPU регистр (ST0.. ST7)

      MMX

      Любой MMX регистр(MM0.. MM7)

      CRX

      Любой контрольный регистр (CR0.. CR7)

      DRX

      Любой регистр отладки (DR0.. DR7)

      CONST

      Любая константа

      OFFSET

      Аналогично CONST

Note
Warning! при использовании данной функции содержимое окна ссылок изменяется (View→References).
Возвращаемое значение

Функция возвращает адрес найденной последовательности команд или 0, если ничего не найдено.

Пример
findCmd(r.eip,"nop");

int findCmds(int addr, string cmds);

Поиск всех включений последовательности ассемблерных команд.

Note
Первым элементом возвращаемого массива - является адрес, с которого начинался поиск.
Note
Описание параметров смотри в findCmd.
Возвращаемое значение

Функция возвращает массив адресов(int) или null если ничего не найдено.

Пример
findCmds(r.eip,"nop");

int findOp(int addr,string template);

Поиск опкода команды по шаблону

Параметры
  • addr:

    • Адрес инструкции.

  • template:

    • Шаблон, которому должны соответствовать начальные байты команды.

Note
Под шаблоном подразумевается строка, содержащая символы 0-9,A-F,? где ? означает переменное значение
Возвращаемое значение

Функция возвращает адрес найденной команды или 0 в случае ошибки.

Пример
findOp(r.eip,"EB??");

int find(int addr,string template);

Поискпоследовательности байт по шаблону

Параметры
  • addr:

    • Адрес с которого начнётся поиск.

  • template:

    • Шаблон, которому должна соответствовать искомая последовательность байт.

Note
Описание шаблонов смотри в findOp.
Возвращаемое значение

Функция возвращает адрес найденной последовательности байт или 0 в случае ошибки.

Пример
find(r.eip,"E9 ????????");

bool replace(string findingTemplate,string replacingTemplate,int startAddr,int size);

Поискпоследовательности байт по шаблону

Параметры
  • findingTemplate:

    • Шаблон, которому должна соответствовать искомая последовательность байт.

  • replacingTemplate:

    • Шаблон, по которому происходит замена.

  • startAddr:

    • Адрес, с которого начнётся поиск.

  • size:

    • Размер блока данных, в котором будет вестись замена.

Note
Описание шаблонов смотри в findOp.
Возвращаемое значение

Функция возвращает true если была произведена хоть одна замена, и false в остальных случаях.

Пример
replace("74??","75??",r.eip,1024);