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


Для чего именно предназначена моя библиотека - часть 2


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




    Начало  Назад  Вперед



    Книжный магазин