Это означает «Конечная ветвь 64 бита», или, точнее, «Завершить косвенную ветвь в 64 бита»
У Intel есть документ об этой инструкции .
Вот операция:
IF EndbranchEnabled(CPL) & EFER.LMA = 1 & CS.L = 1
IF CPL = 3
THEN
IA32_U_CET.TRACKER = IDLE
IA32_U_CET.SUPPRESS = 0
ELSE
IA32_S_CET.TRACKER = IDLE
IA32_S_CET.SUPPRESS = 0
FI
FI;
В противном случае инструкция считается NOP
.
Функция CET
используется для того, чтобы убедиться, что ваши непрямые ветви действительно идут в правильное местоположение.,Это обеспечивает дополнительную безопасность.Вот параграф от Intel об этом:
ENDBRANCH (подробности см. В разделе 73) - это новая инструкция, которая используется для маркировки действительных целевых адресов перехода косвенных вызовов и переходов в программе.Этот код операции команды выбран как код NOP на устаревших машинах, так что программы, скомпилированные с новой командой ENDBRANCH, продолжают работать на старых машинах без применения CET.На процессорах, которые поддерживают CET, ENDBRANCH по-прежнему является NOP и в основном используется конвейерным процессором в качестве команды маркера для обнаружения нарушений потока управления.Процессор реализует конечный автомат, который отслеживает косвенные команды jmp и call.Когда одна из этих инструкций замечена, конечный автомат переходит из состояния IDLE в состояние WAIT_FOR_ENDBRANCH.В состоянии WAIT_FOR_ENDBRANCH следующая инструкция в потоке программы должна быть ENDBRANCH.Если ENDBRANCH не виден, процессор вызывает исключение защиты управления (#CP), иначе конечный автомат возвращается в состояние IDLE.