Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Упростить и убыстрить алгоритм, Delphi 7 
:(
    Опции темы
tishaishii
Дата 2.4.2007, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Надо убыстрить и упростить алгоритм:
Код
function KeySum(key:PChar):Integer; cdecl; export;
var len, res:Integer;
begin
  len:=length(String(key));
  res:=0;
    while(len>0)do
  begin
        res:=res+ord(String(key)[len]);
        dec(len);
    end;
  result:=res mod 255;
end;

function Crypt(value:PChar; id_firm:PChar):PChar; cdecl; export;
var sum, len, i:Integer;
    res: String;
begin
  Result:=nil;
  len:=length(String(value));
    if (len>0) then
  begin
        sum:=KeySum(id_firm);
    res:='';
    i:=1;
        while(len>0) do
    begin
      res:=res+chr(ord(String(value)[i]) xor ((sum xor len) xor i));
      dec(len);
      inc(i);
        end;
    Result:=PChar(res);
    end;
end;

Можно ли с учётом синтаксиса Delphi 7?
PM MAIL ICQ Skype   Вверх
sgi1981
Дата 2.4.2007, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 16.3.2006

Репутация: 7
Всего: 10



Уже давненько не программирую в 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;


Тестировать - не тестировал. Тестируй сам...


--------------------
Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства.
PM MAIL   Вверх
tishaishii
Дата 5.4.2007, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



KeySum возвращает неадыкватное значение.
В Crypt использована не известная функция lstrlen.

ИТОГО: 0.
PM MAIL ICQ Skype   Вверх
sgi1981
Дата 9.4.2007, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 16.3.2006

Репутация: 7
Всего: 10



lstrlen - функция из библиотеки kernel32.dll возвращает количество символов нуль-терминальной строки



--------------------
Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.4437 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.