在HIGH_LEVEL IRQL下使用FXSAVE/FXRSTOR管理浮点状态是否安全?
关于HIGH_LEVEL IRQL下直接使用FXSAVE/FXRSTOR管理浮点状态的正确性确认
我在运行于HIGH_LEVEL IRQL的内核例程中需要管理浮点状态,但KeSaveExtendedProcessorState和KeRestoreExtendedProcessorState无法在此IRQL级别使用,因此尝试直接调用FXSAVE和FXRSTOR指令来实现。
当前实现
汇编过程定义
SaveFxState PROC ; Save the floating point state mov rax, rcx fxsave [rax] ret SaveFxState ENDP RestoreFxState PROC ; Restore the floating point state mov rax, rcx fxrstor [rax] ret RestoreFxState ENDP
C++外部声明
extern "C" { void SaveFxState(void* saveArea); void RestoreFxState(void* saveArea); }
使用方式
FXSAVE_FORMAT g_FxSaveArea; SaveFxState(&g_FxSaveArea); // 执行浮点运算操作 RestoreFxState(&g_FxSaveArea);
能否有人确认这种在HIGH_LEVEL IRQL下管理浮点状态的方法是否正确且安全?希望得到相关见解或改进建议。
内容的提问来源于stack exchange,提问作者daniel
相关产品推荐
相关产品推荐

