|
|
| Посл.отвђт | Сообщен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 · Поправил: volodyatest 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 прав по поводу нулей, а не единичек. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.057 |