машинный код Intel к вопросу об ассемблерном коде

эксперты, я задаюсь вопросом, преобразование intel x86 machineCode/assemblyCode является singleSide или bothSide?

средства: assemblyCode---> машинный код и машинный код---> assemblyCode оба доступен.

так как x86 машинный код, варьируются по размеру (1-15 байтов), и код операции варьируется по (1-3 байтам), как решить, что один код операции составляет 1 байт или 2 байта или 3 байта?

и я никогда не находил пример префикса x86 инструкций, если вот 1-байтовый префикс, как решить, что это - префикс или код операции?

конечно, assemblyCode---> машинный код, идентификационные данные мнемоники + oprand [w/b] могут определить то, что машинный код ответа путем отображения определенного MappingTable.

но, когда процесс инвертируется:

{bbbbbbbb, bbbbbbbb, bbbbbbbb,//instruction1 bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb,//instruction2 bbbbbbbb, bbbbbbbb//instruction3}

----> {bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb}

я не знаю, который является значимыми битами или byts к решительному, какой длины (что размер) одна инструкция.

был бы кто-либо говорить мне, как определить это? (размер кода операции, примера префикса.) благодарит справка.

8
задан Johnny 9 March 2010 в 14:18
поделиться

3 ответа

Подробная информация приведена в Архитектурах Intel® 64 и IA-32Руководство разработчика по программному обеспечения, том 2B: Справочник по набору инструкций, N-Z. Посмотрите на Приложение А, оно включает в себя все, что вам нужно.

3
ответ дан 5 December 2019 в 20:15
поделиться

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

Однако это приводит к ситуациям, когда некоторые фрагменты кода не дизассемблируются, потому что они могут быть вызваны из таблицы функций или в аналогичных ситуациях, поэтому обычно требуется помощь человека, чтобы увидеть, являются ли оставшиеся разделы кодом или данными.

3
ответ дан 5 December 2019 в 20:15
поделиться

, поскольку машинный код x86 различается размером (1–15 байт), а код операции - (1- 3 байта), как определить, что один код операции - это 1 байт, 2 байта или 3 байта?

Размер инструкции неявно определяется режимом инструкции и адреса, вам нужно будет проверять ISA по одному байту за раз что может и должно следовать за указанным байтом.

и я так и не нашел пример префикса инструкций x86, если здесь 1-байтовый префикс , как определить, что это префикс или код операции ?

Например , префикс переопределения размера операнда (66h) всегда является префиксом.

2
ответ дан 5 December 2019 в 20:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: