Набор статей и руководств по дизассемблеру IDA

         

Битовая маска флагов, изменяемых данной


Битовая маска флагов, изменяемых данной инструкцией. Вычисляется как 1, сдвинутая влево на значение флага (значения флагов см. в файле заголовков x86.h - макросы f_XX).

  • unsigned short rflags

    Битовая маска флагов, от которых зависит выполнение данной инструкции (аналогично cflags).


  • unsigned short uflags

    Битовая маска флагов, состояние которых не определено после выполнения данной инструкции (аналогично cflags).


  • char ops

    Битовая маска операндов, изменяемых данной инструкцией. Это поле дублирует флаги 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 байтом.



    • Содержание раздела