Как написать дизассемблер?
Я бы порекомендовал проверить 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 элементов:
- Префиксы инструкций, влияют на поведение инструкций операция.
- Обязательный префикс, используемый в качестве байта кода операции для инструкций SSE.
- Байты кода операции могут быть одним или несколькими байтами (до 3 полных байтов).
- Байт ModR / M является необязательным и иногда может содержать часть код операции.
- Байт SIB является необязательным и представляет собой сложное косвенное обращение к памяти. формы.
- Смещение не является обязательным, и это значение переменной величины байтов (byte, word, long) и используется как смещение.
- Немедленное значение не является обязательным и используется в качестве общего числового значения. от разного размера байтов (байт, слово, длинное).
Формат выглядит 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
Цитата:
Этапы декодирования
- [Префиксы]
- [Получить код операции]
- [Код операции фильтра]
- [Извлечь операнды]
- [Форматирование текста]
- [Шестнадцатеричный дамп]
- [Расшифрованная инструкция]
Также объясняется 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
Как написать дизассемблер?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.