【问题标题】:Add 0xFFFFFFFF in x86 assembly在 x86 程序集中添加 0xFFFFFFFF
【发布时间】:2020-09-27 10:50:31
【问题描述】:

我目前正在逆向反汇编,偶然发现了一系列我不明白的指令:

给定esi中的对象指针。

.text:00C20263                 cmp     dword ptr [esi+80h], 0
.text:00C2026A                 jnz     short loc_C2027D

如您所见,如果成员 +0x80 不为 0(成员为整数),则代码跳转到 00C2027D

.text:00C2027D                 add     dword ptr [esi+80h], 0FFFFFFFFh
.text:00C20284                 jnz     short loc_C20291

这两个指令是我不太明白的。首先,成员增加0xFFFFFFFF;但是由于成员不是0,这不会超过32位整数的最大值吗?而jnz指令什么时候跳转?

能否指出这两条指令的目的是什么?

【问题讨论】:

    标签: assembly x86


    【解决方案1】:

    对于有符号变量,0FFFFFFFFh 与 -1 相同,因此这是从值中减去 1 并检查它是否为零。编译器通常会发出“加负值”而不是子指令,大概是因为它允许重用编译器逻辑进行加法和减法。

    【讨论】:

    • 非常感谢。在这一点上这是完全有道理的。
    • @MihaiLabo 对此我感到非常抱歉,当我读到这个答案时,我无法按下它,然后就忘了它;)
    猜你喜欢
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-24
    • 2020-07-02
    相关资源
    最近更新 更多