逆向学习

1.返回一个布尔型的汇编

源码: int     var4, var8; return var4>=var8; 反汇编码: .text:00401084                 mov     edx, [ebp+var_8] .text:00401087                 cmp     [ebp+var_4], edx .text:0040108A                 sbb     eax, eax .text:0040108C                 inc     eax 

cmp是比较指令, cmp的功能相当于减法指令,只是不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。

cmp ax,bx的逻辑含义是比较ax,bx中的值。如果执行后:  ZF=1则AX=BX  ZF=0则AX!=BX  CF=1则AX<BX  CF=0则AX>=BX  CF=0并ZF=0则AX>BX  CF=1或ZF=1则AX<=BX

由此可知,

if(var4>=var8)    cf=0; if(var4<var8)    cf=1;

SBB:带借位减法, 格式:SBB DST,SRC, 执行的操作:(DST)←(DST)-(SRC)-CF,其中CF为进位的值

所以分情况得到以下代码:

if(var4>=var8)    cf=0; if(var4<var8)    cf=1; return eax-eax-cf+1;  所以翻译以下就是:  if(var4>=var8)    return 1; if(var4<var8)    return 0;  相当于  return var4>=var8;


 
 
 
 



你可能感兴趣的:(c,汇编,DST)