SETSSBSY
Mark Shadow Stack Busy
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
F3 0F 01 E8 | SETSSBSY | ZO | Valido | Valido | Establecer bandera ocupada en la referencia token de la pila de sombras supervisora por IA32 PL0 SSP. |
Coste medido
Cargando las mediciones de arch-data...
Descripción
La instrucción SETSSBSY verifica la presencia de un apilador de sombras de supervisor no abusado en la dirección del IA32 PL0 SSP MSR y la marca ocupada. Después de la ejecución exitosa de la instrucción, el SSP se establece en el valor del IA32 PL0 SSP MSR.
Esta instrucción no se puede ejecutar cuando las transiciones FRED están habilitadas. Las transiciones FRED no utilizan tokens de apilamiento de sombras supervisor.
Operación
IF CR4.CET = 0 OR CR4.FRED = 1
THEN #UD; FI;
IF IA32_S_CET.SH_STK_EN = 0
THEN #UD; FI;
IF CPL > 0
THEN GP(0); FI;
SSP_LA = IA32_PL0_SSP
If SSP_LA not aligned to 8 bytes
THEN #GP(0); FI;
expected_token_value = SSP_LA (* busy bit must not be set *)
new_token_value = SSP_LA | BUSY_BIT (* set busy bit; bit position 0 *)
IF shadow_stack_lock_cmpxchg8B(SSP_LA, new_token_value, expected_token_value) != expected_token_value
THEN #CP(SETSSBSY); FI;
SSP = SSP_LABanderas afectadas
None.
C/C++ Compiler Intrinsic Equivalent SETSSBSYvoid setssbsy(void);
Excepciones
Modo protegido
#UD | Si se utiliza el prefijo LOCK. Si CR4.CET = 0. IF IA32_S_CET.SH_STK_EN = 0. |
#GP(0) | Si IA32 PL0 SSP no está alineado con 8 bytes. Si CPL no es 0. |
#CP(setssbsy) | Si la token está ocupada. |
#PF(fault-code) | Si la dirección en token no está por debajo de 4 GBytes. Si un fallo de pagina ocurre. |
Modo real
#UD | La instrucción SETSSBSY no se reconoce en modo de direccion real. |
Modo virtual-8086
#UD | La instrucción SETSSBSY no se reconoce en modo virtual-8086. |
Modo de compatibilidad
#UD | Si se utiliza el prefijo LOCK. Si CR4.CET = 0. IF IA32_S_CET.SH_STK_EN = 0. Si CR4.FRED = 1. |
#GP(0) | Si IA32 PL0 SSP no está alineado con 8 bytes. Si CPL no es 0. |
#CP(setssbsy) | Si la dirección en ficha no está por debajo de 4 GBytes. #PF(fault-code) Si ocurre un fallo de pagina. |
Modo de 64 bits
| Igual que las excepciones del modo de compatibilidad (excepto no hay comprobación en la dirección token). |