Вопрос № 93815: Добрый день, уважаемые Эксперты!
Скажите, пожалуйста, почему в процедуре "Infect" mov cx,offset Finish-100h-F_bytes ? почему размер вируса именно mov cx,offset Finish-100h-F_bytes..
никак понять не могу...
Заранее спасибо!
У...
Вопрос № 93.815
Добрый день, уважаемые Эксперты!
Скажите, пожалуйста, почему в процедуре "Infect" mov cx,offset Finish-100h-F_bytes ? почему размер вируса именно mov cx,offset Finish-100h-F_bytes..
никак понять не могу...
Заранее спасибо!
Удачи! Всего хорошего!
Отвечает: Зенченко Константин Николаевич
Здравствуйте, Покритюк Виталий Леонидович!
Наличие org 100h указывает, что это *.com программа.
Ещё во время DOS для экономии памяти при хранении инфомации на дисках ( далеко не гигобайтных) использовался этот формат, его особенность это то, что 256 байт префикса программы (в *.ехе программах перфикс находится вместе с программой тем самым увеличивая ее размер) при запуске заполняла сама DOS т.к. он был стандарный.
Все *.com программы пишутся с учетом смещения 100h и строго начинаются с этого с этого адреса. Значит мы его вычитаем. F_bytes это первые байты файла жертвы и которые мы храним тут First_bytes db 4 dup (90h), 0CDh, 20h
Finish equ $
тоже не нужны так как для них уже место отведено- вычитаем.
Вирус записыватеся в конец файла поэтому эта команда в CX запишет реальный размер вируса, на который и будет потом увеличен размер файла.
Удачи!
--------- И только наступив на грабли мы преобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: Практикант)
Ответ отправлен: 03.07.2007, 20:39 Оценка за ответ: 4 Комментарий оценки: но ведь mov ah,3Fh mov cx,F_bytes mov dx,offset Finish int 21h Оно бы ведь должно сохраняться не в First_bytes а после метки "Init"... ((