LINUX.ORG.RU
ФорумTalks

[asm] задачка

 


0

1
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 - долгосрочный регистр в большинстве программ, то для использования в них этой функции его лучше сохранять.

Разгадайте:

  1. Соглашение вызова;
  2. Количество параметров;
  3. Значения для последнего параметра;
  4. Возвращаемый результат;
  5. Главную особенность, используемую чаще всего для шифрования кода, а не для краткости.

Дополнительное задание на дополнительный балл - представить, для чего это может быть нужно.


это реальная задача (из какого-нибудь курса или книги), или просто дизассемблированный кусок кода программы?

XVilka ★★★★★
()

Данных маловато.

Видно что код самомодифицирующийся.

Xenius ★★★★★
()

Похоже на fascall с 3 параметрами, последний от 0 до 3.

ratvier ★★
()

5A7EF7 A20C7F5A00; MOV [5A7F0C],AL

5A7F0B 0FAB1499; BTS [ECX+EBX*4],EDX

тут что-то другое будет, надо в отладчике гонять, смотреть что такое.

ИЧСХ 5A7EEC 8B442404; MOV EAX,[ESP+4]

т.е. код меняется в зависимости от параметра. Похоже на ввод кода в платных программах. Вы будете платить за полный анализ? Хотя цена вопроса вас не обрадует, лучше спросите на винфаке.

drBatty ★★
()
Ответ на: комментарий от Keller

> Сделано для экономного хранения данных.

И много сэкономили? Пару десятков байт экономии кода ценой потенциально неуловимых глюков и сбросом кеша при каждом проходе. Если я правильно помню, на первом уровне они для данных и кода разные.

i-rinat ★★★★★
()

msfastcall, 3 parameters, для всего остального надо смотреть коды инструкций и считать

x0r ★★★★★
()
Ответ на: комментарий от Keller

мне вот одно интересно - прочитать это легко, при знании ассемблера. Но как такое писать/проектировать - вот это мне непонятно :)

XVilka ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.