我目前正在反向反汇编,偶然发现了一系列我不理解的指令:
给定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这两个指令是我不太理解的。首先,该成员递增0xFFFFFFFFF;但是由于该成员不是0,这不会超过32位整数的最大值吗?jnz指令什么时候跳转?
可以指出这两个指令的目的是什么吗?
发布于 2012-07-10 02:12:50
对于有符号变量,0FFFFFFFFh与-1相同,所以这是从值中减去1,并检查它是否为零。编译器通常会发出“相加负值”而不是sub指令,这可能是因为它允许重用编译器逻辑进行加法和减法。
https://stackoverflow.com/questions/11400624
复制相似问题