Как правильно декодировать SSE-инструкции, в которых встречается несколько префиксов, каждый из которых может быть mandatory ? Например: F3 66 0F 10 C1 IDA воспринимает это как rep movupd xmm0, xmm1 А, например, OllyDBG: movss xmm0, xmm1 , т.е. для него префикс 0xF3 важней. Можно, конечно, было бы еще проверить несколько дизассемблеров, но пока лень, хочется истину знать.
У Olly есть проблема с выполнением взаимоисключающих параграфов . Учитывается тот префикс, который ближе к опкоду, IDA права.
Тогда получается, что тоже не права, т.к. 66 F3 0F 10 C1 - все равно в итоге rep movupd xmm0, xmm1. А в мануалах эта информация есть, или проверено опытным путем? Сейчас в исходниках diStorm'а в тоже такой комментарий нашел, что учитывается ближайший префикс.
Да, нашел. Надо было просто вдумчиво прочитать этот параграф... А вообще, в самих мануалах зачастую находишь мелкие ошибки/опечатки по ходу написания дизасма. Например, в таблице опкодов во втором томе кое-где операнды неправильно обозначены.
inviZ в SSE инструкциях 66 F3(F2 или в обратном порядке) на новых процессорах будет вызывать исключение. А вот в случае начилия F2 и F3(без 66) будет действовать последний префикс.
inviZ Например? Я только обнаружил там отсутствие некоторых команд. Опечаток, вроде бы, не помню. Правда, я другой источник использую. Black_mirror А можно чуть подробнее? Где про это можно почитать?
AMD x86-64 Architecture Programmer’s Manual Volume 3: General-Purpose and System Instructions 1.2.2 Operand-Size Override Prefix The result of using an F2h or F3h repeat prefix along with a 66h prefix in 128-bit or 64-bit media instructions is unpredictable. У интела думаю тоже есть похожие слова.
Mika0x65, например, у pextrw или pmovmskb первый операнд обозначен - Gd, т.е. 32-битный GPR. А на самом деле это может быть и 64-битный GPR (в 64-битном режиме, если REX.W = 1). В общем-то, видимо просто недоглядели и забыли таблицу подредактировать. Далее, cvtpd2pi (66 F0 2D) - вместо Qpi должно быть Ppi. В общем, такие опечатки/ошибки мелкие в основном. Еще несколько было, но скачал последние мануалы - их все-таки исправили.)