注册机 (2千字)
有些程序的定时处理中会调用hmemcpy,CTerm也是。#include <stdio.h>
#include <string.h>
void main(void)
{
long Table[11] = { 0, 5, 7, 3, 2, 0, 1, 4, 8, 3, 8 };
char Name[64];
long sum;
int k;
int len;
printf("Input your name:");
gets(Name);
len = strlen(Name);
if (len > 10)
{
len = 10;
}
sum = 0;
for (k = 1; k < 11; k++)
{
if (len >= k)
{
sum += Table[k-1] * ((long)Name[k-1] & 0xFF);
sum -= Table[k];
}
else
{
sum += (Table[k-1] << 5) + Table[k];
}
}
printf("Your registration code is: WPC25-%06d\n", sum);
}
对应的汇编代码:
015F:004690F1 XOR EBX,EBX
015F:004690F3 MOV EAX,[EBP-04]
015F:004690F6 CALL 00403C88
015F:004690FB MOV ECX,EAX
015F:004690FD CMP ECX,0A
015F:00469100 JLE 00469107
015F:00469102 MOV ECX,0000000A
015F:00469107 MOV EDX,00000001
015F:0046910C MOV EAX,00484CF4
015F:00469111 CMP ECX,EDX
015F:00469113 JGE 00469121
015F:00469115 MOV ESI,[EAX]
015F:00469117 SHL ESI,05
015F:0046911A ADD EBX,ESI
015F:0046911C ADD EBX,[EAX+04]
015F:0046911F JMP 00469131
015F:00469121 MOV ESI,[EBP-04]
015F:00469124 MOVZX ESI,BYTE PTR [EDX+ESI-01]
015F:00469129 IMUL ESI,[EAX]
015F:0046912C ADD EBX,ESI
015F:0046912E SUB EBX,[EAX+04]
015F:00469131 INC EDX
015F:00469132 ADD EAX,04
015F:00469135 CMP EDX,0B
015F:00469138 JNZ 00469111
015F:0046913A LEA EAX,[EBP-0C]
015F:0046913D PUSH EAX
015F:0046913E MOV [EBP-14],EBX
015F:00469141 MOV BYTE PTR [EBP-10],00
015F:00469145 LEA EDX,[EBP-14]
015F:00469148 XOR ECX,ECX
015F:0046914A MOV EAX,004691C4
015F:0046914F CALL 00407E24
015F:00469154 JMP 00469172
015F:00469156 MOV EDX,[EBP-0C]
015F:00469159 MOV EAX,004691D8
015F:0046915E CALL 00403F14
015F:00469163 MOV EBX,EAX
015F:00469165 LEA EAX,[EBP-0C]
015F:00469168 CALL 00403E58
015F:0046916D MOV BYTE PTR [EBX+EAX-01],30
015F:00469172 MOV EDX,[EBP-0C]
015F:00469175 MOV EAX,004691D8
015F:0046917A CALL 00403F14
015F:0046917F TEST EAX,EAX
015F:00469181 JG 00469156
