x86 - 获取方向标志的当前状态(DF)

Avi*_*viv 3 c windows debugging x86 assembly

我试图从EFLAGS寄存器中获取DF的值.我尝试使用该LAHF指令,但根据Intel X86文档,该指令仅加载SF, ZF, AF, PF, CF标志.但是,我试图找到一条能给我DF寄存器值的指令.

提前致谢.

Sep*_*and 8

使用以下代码:

pushf                ;Maybe you'll need pushfd
pop  eax
bt   eax, 10
Run Code Online (Sandbox Code Playgroud)

如果设置了CF,则设置DF!


如果你不想破坏任何注册,你可以使用下一个方法(受@fuz启发):

pushf
test byte [esp+1],4
lea  esp, [esp+4]      ;The LEA instruction doesn't change any flags
Run Code Online (Sandbox Code Playgroud)

这次如果设置了ZF,则表示DF已被清除!

  • @fuz那么也许是一个对代码放置更宽容的解决方案:`pushf`; `test byte [esp + 1],4`; `lea esp,[esp + 4]`测试结果仍然可用. (3认同)

RbM*_*bMm 5

这也可以使用内部函数__readeflags来完成- 所以不需要内联汇编(仅适用于x86) - 接下来只需要代码就可以在x86和x64平台上运行:

if (__readeflags() & (1 << 10))
{
    // D flags is set
}
Run Code Online (Sandbox Code Playgroud)

然而在Windows上,这个标志几乎总是被清除