在攻击Linux内核时,我注意到它会在执行FPU相关任务之前执行FXSAVE
指令。我知道FXSAVE
指令会将FPU状态保存到内存中的目的地,可以通过FXRSTOR
指令恢复。我的问题是,如果我在执行FXSAVE
指令之前执行FXRSTOR
两次。
例如:
char fxsave_region1[512] __attribute__((aligned(16)));
char fxsave_region2[512] __attribute__((aligned(16)));
asm volatile(" fxsave; "::"m"(fxsave_region1));
/* miscellaneous floating point operations */
asm volatile(" fxsave; "::"m"(fxsave_region2)); /* will this work? */
/* some more miscellaneous floating point operations */
asm volatile(" fxrstor; "::"m"(fxsave_region2));
/* even more miscellaneous floating point operations */
asm volatile(" fxrstor; "::"m"(fxsave_region1));
或者仅支持一级保存?
答案 0 :(得分:4)
与F(N)SAVE
不同,FXSAVE
不会更改FPU / MMX和SSE寄存器的状态,因此您可以多次重复它。