天天看點

逆向學習

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;