Уже давненько не программирую в Delphi, але думаю, что...
| Код | function KeySum(key:PChar):Integer; cdecl; export; var len, res:Integer; begin asm cld; mov esi, key; xor edx,edx; xor eax,eax; @c1:lodsb; test al,al; je @p2; add edx,eax; jmp @c1; @p2: mov eax,edx; xor edx,edx; mov ecx,255; div ecx; mov eax,edx; end; end;
|
| Код | function Crypt(value:PChar; id_firm:PChar):PChar; cdecl; export; var len: Integer; res: Integer; begin asm mov res, 0; mov ebx, value; cmp byte ptr [ebx],0; je @p88; push value; call lstrlen; mov len, eax; inc eax; push eax; push 0; call GlobalAlloc; mov res, eax; push id_firm; call KeySum; mov ebx, eax; {sum - ebx} cld; mov edi, res; {res - edi} xor eax,eax; mov esi, value; mov ecx, len; {len - ecx} mov edx, 1; {i - edx} @c1: mov al, bl; xor al, cl; xor al, dl; xor al, [esi]; mov [edi], al; inc esi; inc edi; inc edx; loop @c1; mov byte ptr [edi], 0; @p88: end; Result:=PChar(res); end;
|
Тестировать - не тестировал. Тестируй сам... |