· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.VIROLOGY —› Не понял алгоритм округления у Коваля

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Дек 10, 2003 21:52:24 · Поправил: Безпощадный даос

Читая И. Коваля код нерезидентного com вира. Не понял алгоритм округления. После нахождения нужного файла и
установления его размера. Может кто в этом компентентный?


Дата: Дек 11, 2003 14:03:17 · Поправил: Grenader

EvilsInterrupt
Коллега, ну неужели нельзя привести исходник? Вы вроде как давно на форуме присутствуете...


Дата: Дек 11, 2003 22:31:48

Ща кину. Мне короче практически все понятно окромя алгоритма округления. Прошу вас если могете его мне
разъясните, только пожалуйста назначения команд не надо.

_1406568615__VIRUS.ASM


Дата: Дек 11, 2003 22:41:44 · Поправил: volodya

test ax,000fh 
...


Младшие четыре бита должны быть НУЛЯМИ, чтобы число делилось на шестнадцать (см. в посту ниже, умница Квант и Гренадер правы, пиная меня).
or ax,000fh
inc ax


or поставит ax кратным шестнадцати, даже если раньше так не было :) inc - увеличит :)


Дата: Дек 11, 2003 22:55:57

Все просто. Сначала мы проверяем командой "test ax,000fh" кратно ли число 16 (т.е. установленны ли в 0 его 4 младших бита). Дальше мы округляем в большую сторону. Пример: число 401h, не кратно 16.
Следующее кратное число - 410h. Как его получить? Мы установим младшие 4 бита в 1, и получим 40fh - т.е. "кратное число - 1" (команда "or ax, 000fh"). Теперь просто прибавим 1. Получилось 410. Все довольно просто, ведь 0ffh + 1 = 100h :) Можно было сделать и так:
and ax, 0fff0h
add ax, 10h

Это более "наглядно", но занимает больше места - а мы же вирус пишем, так? :)


Дата: Дек 11, 2003 22:56:16

Все въезжать начинаю ... Но вы шлите помощь, информации ни когда слишком много не бывает.


Дата: Дек 11, 2003 22:58:08

volodya
мдя, пока отвлекался - меня обскакали :)


Дата: Дек 11, 2003 22:58:53

Grenader
:)


Дата: Дек 11, 2003 23:01:16

EvilsInterrupt
Куда ж еще хелпы-то? Осталось только интеловское описание команд :)


Дата: Дек 11, 2003 23:04:56

Да ладно вам, это я дури чо-то дал. Сорри.


Дата: Дек 11, 2003 23:13:04

volodya
кстати - не хочу придираться, но все таки (дабы не сеять панику среди молодого поколения):
Младшие четыре бита должны быть единицами, чтобы число делилось на шестнадцать
Ты наверное имел в виду нули...


Дата: Дек 11, 2003 23:28:48 · Поправил: volodya

Да, нули. И ты, и Квант правы. Я не прав.


Дата: Дек 11, 2003 23:41:33 · Поправил: Grenader

volodya
Батенька, да вы что? :) Тьфу, сам запутался.... Короче, F - это 15, а не 16 :) отсюда и трабл :))) нам же надо получить число, кратное 16.


Дата: Дек 11, 2003 23:51:52 · Поправил: volodya

[шутю я так]


Дата: Дек 11, 2003 23:58:30

volodya
Не хочу тебя обижать, но Grenader прав по поводу нулей, а не единичек.

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.057