5A7EEC 8B442404; MOV EAX,[ESP+4]
5A7EF0 53; PUSH EBX
5A7EF1 8A800C2B4000; MOV AL,BYTE [EAX+402B0C]
5A7EF7 A20C7F5A00; MOV [5A7F0C],AL
5A7EFC 8BDA; MOV EBX,EDX
5A7EFE C1EB05; SHR EBX,5
5A7F01 B820000000; MOV EAX,20
5A7F06 0FAFC3; IMUL EAX,EBX
5A7F09 2BD0; SUB EDX,EAX
5A7F0B 0FAB1499; BTS [ECX+EBX*4],EDX
5A7F0F 0F92C0; SETB AL
5A7F12 5B; POP EBX
5A7F13 C20400; RETN 4
402B0C A3;
402B0D BB;
402B0E B3;
402B0F AB;
Функция длиной всего в 46 байт (42 байта кода + 4 байта данных). Команды PUSH EBX и POP EBX вообще-то могут быть опущены, и тогда будет уже 44 байта. Но так как EBX - долгосрочный регистр в большинстве программ, то для использования в них этой функции его лучше сохранять.
Разгадайте:
- Соглашение вызова;
- Количество параметров;
- Значения для последнего параметра;
- Возвращаемый результат;
- Главную особенность, используемую чаще всего для шифрования кода, а не для краткости.
Дополнительное задание на дополнительный балл - представить, для чего это может быть нужно.