最初由 huoshan 发布
呵呵,弄了好几次也无法编译成楼主的那样
第一句原文不是这样的!
我跟踪一软件,中间过程,ecx值为5e280,故第一句的机器码应该不是这样的,抱歉!
这是原文
0040B7A0 . 8B4C24 04 mov ecx, dword ptr ss:[esp+4] ; 余数为1时,进入这里比对注册码 ecx=5E280(我这里是先进入它)
0040B7A4 . B8 C94216B2 mov eax, B21642C9
0040B7A9 . F7E9 imul ecx ; 这么大的数相乘,我不懂,请大虾赐教,谢谢
0040B7AB . 8BC2 mov eax, edx ; EAX=3D680, EDX=FFFE3580
0040B7AD . 03C1 add eax, ecx ; EAX=41800
0040B7AF . C1F8 04 sar eax, 4 ; EAX/10
0040B7B2 . 8BC8 mov ecx, eax
0040B7B4 . C1E9 1F shr ecx, 1F ; 查书本,到底sar,shr哪个是哪个循环移位。嘿,水货一个,我
0040B7B7 . 03C1 add eax, ecx ; EAX=4180+0=4180
0040B7B9 . B9 0A000000 mov ecx, 0A
0040B7BE . 99 cdq
0040B7BF . F7F9 idiv ecx ; eax=68C, EDX=8
0040B7C1 . 8A4C24 08 mov cl, byte ptr ss:[esp+8] ; cl=30 (注册码第一位)
0040B7C5 . 33C0 xor eax, eax
0040B7C7 . 80C2 30 add dl, 30 ; dl=38
0040B7CA . 3AD1 cmp dl, cl ; 第一位注册码则为8
0040B7CC . 0F94C0 sete al
0040B7CF . C3 retn