Битовая маска флагов, изменяемых данной
Битовая маска флагов, изменяемых данной инструкцией. Вычисляется как 1, сдвинутая влево на значение флага (значения флагов см. в файле заголовков x86.h - макросы f_XX).
Битовая маска флагов, от которых зависит выполнение данной инструкции (аналогично cflags).
Битовая маска флагов, состояние которых не определено после выполнения данной инструкции (аналогично cflags).
Битовая маска операндов, изменяемых данной инструкцией. Это поле дублирует флаги CF_CHG поля feature структур instruc_t - но себе я доверяю значительно больше, чем Ильфаку :-)
Также для манипуляций с этими структурами предоставлены несколько функций (реализованы в файле x86.cpp) :
- const struct RP_opcode *get_opcode(const struct insn_t *)
Функция, возвращающая структуру RP_opcode по заполненной структуре insn_t. Прошу отметить, что недостаточно простого индексирования по полю itype. В качестве примера можно рассмотреть инструкцию mul. Обычно она изменяет значение пары регистров EAX & EDX, но если операнды имеют размер 8 бит, инструкция изменяет только регистр EAX.
Также эта функция проверяет аналогичные особые случаи для инструкций div, idiv и imul. - bool is_change_reg(const struct insn_t *, struct RP_opcode *, int reg)
Проверяет, изменяет ли инструкция, описывающаяся IDA структурой insn_t, и моей структурой RP_opcode, регистр reg. - bool exists_XXX
Inline-функции, возвращающие булевское значение, если некое поле содержит значение в данном операнде. - get_SIB_XX
Inline-функции для манипуляций с SIB байтом.