Как написать дизассемблер?

Я бы порекомендовал проверить i386 некоторые дизассемблеры с i386 открытым исходным кодом, предпочтительно disassembling distorm и особенно "disOps pentium (Instructions Sets DataBase)" (ctrl disassembly + найти его на странице).

Сама ia32 документация полна интересной pentium информации о кодах операций pentium и инструкциях.

Цитата из https://code.google.com/p/distorm/wiki/x86_x64_Machine_Code

Инструкция 80x86:

Инструкция i386 80x86 делится на количество disassembler элементов:

  1. Префиксы инструкций, влияют на поведение инструкций операция.
  2. Обязательный префикс, используемый в качестве байта кода операции для инструкций SSE.
  3. Байты кода операции могут быть одним или несколькими байтами (до 3 полных байтов).
  4. Байт ModR / M является необязательным и иногда может содержать часть код операции.
  5. Байт SIB является необязательным и представляет собой сложное косвенное обращение к памяти. формы.
  6. Смещение не является обязательным, и это значение переменной величины байтов (byte, word, long) и используется как смещение.
  7. Немедленное значение не является обязательным и используется в качестве общего числового значения. от разного размера байтов (байт, слово, длинное).

Формат выглядит i386 следующим образом:

/-------------------------------------------------------------------------------------------------------------------------------------------\
|*Prefixes | *Mandatory Prefix | *REX Prefix | Opcode Bytes | *ModR/M | *SIB | *Displacement (1,2 or 4 bytes) | *Immediate (1,2 or 4 bytes) |
\-------------------------------------------------------------------------------------------------------------------------------------------/
* means the element is optional.

Структуры disassembler данных и этапы декодирования ia32 объясняются в https://code.google.com/p/distorm/wiki/diStorm_Internals

Цитата:

Этапы декодирования

  1. [Префиксы]
  2. [Получить код операции]
  3. [Код операции фильтра]
  4. [Извлечь операнды]
  5. [Форматирование текста]
  6. [Шестнадцатеричный дамп]
  7. [Расшифрованная инструкция]

Также объясняется disassembly каждый шаг.


Исходные ссылки ia32 сохранены по историческим ia32 причинам:

http://code.google.com/p/distorm/wiki/x86_x64_Machine_Code и http://code.google.com/p/distorm/wiki/diStorm_Internals

x86

disassembly

2022-05-17T13:57:19+00:00