FXSAST可以在FXRSTOR之前执行两次吗?

时间:2013-04-15 17:47:35

标签: c assembly linux-kernel x86 x86-64

在攻击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));

或者仅支持一级保存?

1 个答案:

答案 0 :(得分:4)

F(N)SAVE不同,FXSAVE不会更改FPU / MMX和SSE寄存器的状态,因此您可以多次重复它。