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

         

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


Как Вы уже могли заметить по прочтении предыдущей главы, IDA Pro предоставляет множество информации по дизассемблируемой инструкции, но далеко не всю. Скажем, Вы не можете из IDA узнать, что, для примера, инструкция CPUID изменяет регистры EAX,EBX,ECX & EDX. Нам нужна ещё одна таблица с характеристиками инструкций, индексируемая по itype - именно она и есть основа моей библиотеки (файл x86data.c). Причём, в отличие от массива instruc структур processor_t (который недоступен нам для изменений в силу своей закрытости), моя таблица распространяется в исходных кодах, поэтому любой желающий может её модифицировать и добавить свойства, которые он посчитает нужным (скажем, время исполнения инструкции - и тогда из IDA Pro можно будет сделать весьма неплохой статический profiler). Прошу обратить внимание, что в настоящее время такая таблица составлена мною только для процессора x86. Чтобы сваять аналогичную для другого процессора, Вам нужно будет:

  1. С помощью reverse engeneering выпотрошить itypes инструкций и их мнемоники из соответствующего процессорного модуля (это значительно легче, чем Вы думаете, особенно если Вы умеете писать на IDC)
  2. Возможно, поправить конвертор inst.pl (см. его описание и предназначение ниже)
  3. Собственно заполнить файл данных для Вашего процессора
  4. В настоящее время для каждой инструкции определены следующие характеристики (описываемые структурой RP_opcode) :

    • unsigned char type

      Тип инструкции. Может быть 0,FPU, MMX, AMD_3D, SSE или UNKNOWN_IT (для недокументированных инструкций).

    • unsigned char from_proc

      Указывает на тип процессора, с которого данная инструкция опознаётся. Может быть 0 (386 или ниже), FROM_486, FROM_P, FROM_PPRO, FROM_PII - соответственно если инструкция опознаётся с 486, Pentium, Pentium Pro или Pentium II.

    • unsigned long regs

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

    • unsigned short cflags



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