手动更改RFLAGS寄存器

时间:2018-04-10 22:28:16

标签: assembly x86-64 flags

根据Wikipedia, RFLAGS 寄存器在x64架构中包含一些特殊值,例如保留值和I / O权限级别。我想知道是否可以将状态寄存器推入堆栈,修改它然后再将其弹出。

我也怀疑操作系统是否可以阻止这种情况,或者它们是否允许这种篡改。我在考虑这样的事情:

pushfq                 # pushing onto the stack
pop rax                # loading the value in rax
xor rax, 0xcafebabe    # performing some random operation
push rax               # pushing the brand new RFLAGS 
popfq                  # popping it back

1 个答案:

答案 0 :(得分:4)

是的,你可以这样做。但是,如果在权限不足的情况下更改具有特权的标志,则不会修改相关标志。确切的规则有点复杂,有关详细信息,请参阅manual