昨晚逆了一个小程序,主体没有什么大问题,但是就是在写 反 C 代码时,老是不能得到正确的结果。。。
原来程序在 处理 除法指令的过程中出了问题:
mov ecx, [ebp+var_4]
imul ecx, 7
mov edx, [ebp+var_8]
imul edx, 5
add ecx, edx
mov eax, 64h
sub eax, [ebp+var_4]
sub eax, [ebp+var_8]
cdq
mov esi, 3
idiv esi
lea eax, [ecx+eax-64h]
test eax, eax ;就是在这里,程序时test eax ,那么,它选取的应该是除法 的商作为比较
jz short loc_4015EB ;如果 不为 0 ,跳到 short loc_4015EB 继续执行。。。
然而,下边的这一段中:
loc_4015EB:
mov eax, 64h
sub eax, [ebp+var_4]
sub eax, [ebp+var_8]
cdq
mov ecx, 3
idiv ecx
test edx, edx ;test 的是 edx ,那么它告诉我们 它要取 摸判断。。。
jz short loc_401604
这是ASM 中对除法指令的判断方式。。。
商放在----eax
模放在---edx
刚开始,很容易弄混了。。。