ASM:添加0xFFFFFFFF

时间:2012-07-09 18:08:24

标签: assembly x86

我正在逆转反汇编,偶然发现了一条我不明白的指示链: 给定是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指令何时跳转?

有人可能会指出这两条指令的目的是什么?

1 个答案:

答案 0 :(得分:13)

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