SETSSBSY

Mark Shadow Stack Busy

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
F3 0F 01 E8SETSSBSYZOValidoValidoEstablecer 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_LA

Banderas afectadas

None.

C/C++ Compiler Intrinsic Equivalent SETSSBSYvoid setssbsy(void);

Excepciones

Modo protegido
#UDSi 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
#UDLa instrucción SETSSBSY no se reconoce en modo de direccion real.
Modo virtual-8086
#UDLa instrucción SETSSBSY no se reconoce en modo virtual-8086.
Modo de compatibilidad
#UDSi 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).

Fuentes