Как старые процессоры выполняют новые инструкции ENDBR64 и ENDBR32? - PullRequest
3 голосов
/ 14 мая 2019

В какой-то момент Intel начнет поставки процессоров, поддерживающих CET ( C поток управления E nforcement T технология), который добавляет две инструкции ENDBR64 и ENDBR32.

Эти два будут закодированы как

F3 0F 1E FA   for ENDBR64 and 
F3 0F 1E FB   for ENDBR32 respectively. 

Как они будут выполняться на старых процессорах x86?
Например, на Core i5 или даже на старинном Pentium II?

Обновление:

F3 0F = prefix indicating newer instructions
1E = ENDBR
FA = ENDBR64

1 Ответ

6 голосов
/ 14 мая 2019

Старые GDB декодируют F3 0F 1E FA ENDBR64 как repz nop edx.

Однократный переход на Core 2 (Merom) в 64-битном режиме не приводит к изменению архитектурного состояния, а также к ошибкам / исключениям. (Проверено в GDB 7.10 на старой установке Ubuntu 15.10).


Согласно https://gist.github.com/Quasilyte/b60c94b9cb608d5b1a359d54f1be8aca,
0f 1e /r - это 2-байтовый код операции, который принимает ModRM , NOP r/m32, r32, то же самое, что и стандартный многобайтовый 0f 1f NOP, который Intel документирует .

В нем говорится, что он был добавлен с Pentium Pro, поэтому подойдет любой PII / PIII или более поздние версии.

https://github.com/NationalSecurityAgency/ghidra/issues/197#issuecomment-472906147 говорит, что AMD документирует эти дополнительные коды операций NOP; Intel перечисляет их как «зарезервированные».

rep префиксы обычно игнорируются для опкодов, к которым они не применяются. Это дает Intel / AMD возможность использовать REP как часть обязательных префиксов для будущих инструкций по созданию кодировок, которые выиграли неисправен на старых процессорах.


Процессоры старше, чем PPro, например Оригинальный Pentium, возможно, будет неисправен. Так же, как для 0f 1f длинной NOP.


Кстати, ваша попытка расшифровки не имеет смысла. 0f является байтом «escape» для 2-байтовых кодов операций, поэтому 1e push ds не имеет отношения к тому, как это будет декодироваться. Вот как 1e декодирует сам по себе, без 0f escape-байта. (За исключением 64-битного режима, где он недопустим.)

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