Поиск и замена
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);