Что делает нижеприведенный код? Я понимаю только, что он 999 раз в цикле что-то повторяет. В стеке - некоторое число. Код (Text): 0040EA4D 8B4C2404 MOV ECX, [ESP+ARG_0] 0040EA51 8BC1 MOV EAX, ECX 0040EA53 BAE7030000 MOV EDX, 03E7 ;999 раз 0040EA58 56 PUSH ESI 0040EA59 0FB7F0 MOVZX ESI, AX 0040EA5C 69F669900000 IMUL ESI, 9069 0040EA62 C1E810 SHR EAX, 10 0040EA65 03C6 ADD EAX, ESI 0040EA67 0FB7F1 MOVZX ESI, CX 0040EA6A 69F650460000 IMUL ESI, 4650 0040EA70 C1E910 SHR ECX, 10 0040EA73 03CE ADD ECX, ESI 0040EA75 4A DEC EDX 0040EA76 75E1 JNZ 0040EA59 ;Делать 999 раз 0040EA78 890D20AE4500 MOV [0045AE20], ECX 0040EA7E A324AE4500 MOV [0045AE24], EAX 0040AE83 5E POP ESI 0040AE84 C3 RET
int a = b = ARG_0; for ( int i = 0; i < 999; ++ i ) { a = ( a << 10 ) + ( a & 0xFFFF ) * 9069; b = ( b << 10 ) + ( b & 0xFFFF ) * 4650; } Похоже на хеширование... Хотя кто его знает... По обрывку ничего и не скажешь...
Forever int a = b = ARG_0; for ( int i = 0; i < 999; ++ i ) { a = ( a << 16 ) + ( a & 0xFFFF ) * 9069; b = ( b << 16 ) + ( b & 0xFFFF ) * 4650; }
рандом обязательно с глобальными переменными. Только это не рандом. Это скорее, randomize. С неким стартовым значением. Для "перемешивания"... хотя какое еще перемешивание, для псевдослучайных величин...
Самопальный рандом же, нет ничего обязательного.. Может и long int, в любом случае не поймешь, пока не увидишь вызывающего кода %)
Если более конкретно - это исполняемый файл языка q (http://kx.com/Developers/software/windows.zip - там его можно утянуть). В подпрограмму (я так понял - подпрограмму записи новой переменной) передается два параметра - значение (строка -314159) и тип (одной буквой - число в виде строки). Далее число читается, переводится в EAX (целое). А затем выполняется данная подпрограмма - я думал она должна 314159 перевести в 3.14159 (число PI). Хотя этот код мало похож на данное действо. Еще были мысли что это такое умножение - когда вместо деление, когда вместо деления выполняется умножение+сдвиг. Тогда непонятно зачем 999 раз
Forever достаточно было взглянуть на второй столбец шестнадцатеричных цифр, являющихся кодами команд и увидеть в конце команд те же самые цифры, что и в дизассемблерном коде. blueboar сложно сказать, разве что этот язык использует свой формат чисел с плавающей точкой
> На какой-то извратский CRC32 похоже... В CRC32 было бы обращение в таблцице в двордами, либо работа с полиномом и обычно там not eax в конце.
dendi Откуда такие суеверия? CRC разные бывают. А таблица - всего лишь деталь реализации, если не знаешь. Можно тупо посчитать циклом, только это считается менее эффективным.
Спасибо всем отвечавшим, проблема решена. Это оказался SEED - начальное значение для Random. Да и тип (который одной буквой) был S - Seed. А число -314159 - ну понравилось видимо ребятам число PI для SEED'а.