Как создать бинарный файл x86 с поддельными инструкциями - PullRequest
4 голосов
/ 09 июня 2011

Я работаю над проектом, в котором я хотел бы добавить несколько пользовательских кодов операций в x86 и запустить их в QEMU.Я как-то разобрался, как изменить генерацию кода в QEMU, чтобы взять инструкцию по сборке с «поддельным» кодом операции и что-то с ней сделать в QEMU.

Однако у меня возникли проблемы с тем, как на самом деле я хотел бы создать двоичный файл с поддельной инструкцией.Единственный способ, о котором я подумал, - это добавить некоторые операторы db, а затем просто написать инструкцию вручную.Например:

xor EAX, EBX
db 0xf1,0x32,0x55,0x00
mov EBX, EAX

(предположим, что в БД достаточно байтов, чтобы быть действительной инструкцией).Будет ли это на самом деле компилировать двоичный файл, где байты, которые я определил во второй строке, рассматриваются как инструкция?

Есть ли более элегантный подход к этому?Поскольку я буду модифицировать QEMU для поддержки этих изменений, я на самом деле не связан форматом инструкций - мне просто нужно получить код OP, который будет распознаваться генератором кода QEMU, а остальное я могу сформулировать так, как я хочу.

Ответы [ 2 ]

8 голосов
/ 09 июня 2011

Подход с использованием db является стандартной процедурой, когда выходит новая модель ЦП, для которой нет текущих обновлений для текущих инструментов для поддержки дополнительных режимов адресации и / или инструкций.

Обратите внимание, что этоСейчас довольно сложно найти дыры в наборе команд x86 для определения новых инструкций.Проверьте Последние документы по архитектуре процессора Intel : в приложении всегда есть набор таблиц, отображающих отображение кода операции.Это был бы самый простой способ найти неиспользуемую последовательность кода операции.

5 голосов
/ 09 июня 2011

db в порядке и будет выдавать заданную последовательность байтов сразу после первой инструкции и перед последней.

Вы можете рассмотреть возможность создания связки макросов ассемблера для ваших новых инструкций, которые 'Примем соответствующие аргументы и сгенерируем ваши магические байт-коды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...