【问题标题】:How to interpet the EFL in OllyDbg?如何解释 OllyDbg 中的 EFL?
【发布时间】:2013-06-23 04:13:43
【问题描述】:

什么是以及如何使用 OllyDbg 解释 寄存器 下的 EFL?

什么是NONBENEBEANSPOGEG

例子:

EFL 00000246 (NO,NB,E,BE,NS,PE,GE,LE) 

我徒劳的破译:

00000246 => 0000 ... 0010 0100 0110
NO   NB   E    BE   NS   PE   GE   LE
 0    0   0     0    0    1    1    1 <- I do not know if this is correct. 
                                         (Likely not.)

操作:

AND ESI,7FFFFFFF

结果:

EFL 00000202 (NO,NB,NE,A,NS,PO,GE,G)

我的 ASCII,(启发 by):

            _---------------------------=>  E -> NE
           /     _----------------------=> BE -> A
          |     /          _------------=> PE -> PO
          |    |          /          _--=> LE -> G
          |    |         |          /
          |    |         |         |
NO   NB   NE   A    NS   PO   GE   G
0000 0000 0000 0000 0000 0010 0100 0110
0    0    0    0    0    1    1    1

帮助有以下说法:

EFL 后面是条件命令的后缀,满足 当前标志。例如,如果您看到:

EFL 00000A86 (O,NB,NE,A,S,PE,GE,G),

这意味着将采用 JO 和 JNE,而不会采用 JB 和 JPO。


我怀疑CPU FlagsFLAGS register 等,但无法识别例如NO 在其中任何一个中。

【问题讨论】:

    标签: debugging assembly ollydbg


    【解决方案1】:

    EFLFLAGS 寄存器(扩展为包括EFLAGS),用于指示奇偶校验、溢出/进位、方向和分支流以及各种CPU 模式。

    Olly 通过分离出 EFL 之上的公共控制状态位的布尔值(称为“C P A Z S T D O”的单数位)来稍微扩展寄存器。

    EFL 值旁边括号中的缩写与当前 EFLAGS 下可以/不能通过的内容相关,即:NO 代表 No-Overflow,切换 OF 位会将其切换为 O 表示溢出。

    【讨论】:

    • 谢谢。是的,我认为它可能与 EFLAGS 有关,但接下来是什么,例如NO 解释为关于那些?是OFNT 的组合吗?十六进制值如何关联?它可能是位图而不是 AND 值?
    • @Zimzalabim:它是位当前状态的简写(因此您不需要对 EFLAGS 值进行按位细分来判断其当前状态),更新了我的答案以包括这个例子。
    • 好。是的,我的直觉首先说N 否定了一些FLAG 值,但接下来呢? PE?是否有显示缩写含义的列表?
    • @Zimzalabim:我从未见过列表,但您实际上并不需要,只需查看更改值所需的位即可。 PE 是奇偶校验,PO 是奇偶校验。
    • 好的。非常感谢。现在更清楚了。我主要在Linux上。 Windows 上的工具范围令人羡慕。尽管 Linux 通常带有 dbg 是另一个世界。真的很想购买 IDA Pro,但必须考虑现金和使用水平;)OllyDbg 也非常强大。
    猜你喜欢
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 2020-09-07
    • 2011-04-19
    • 2020-10-16
    • 2015-03-23
    相关资源
    最近更新 更多