Вопрос № 44984: Здравствуйте эксперты! На основе вируса изложенного в книге Калашникова, решил написать свой, который бы мог перехватывать 10h прерывание и запрещал бы изменять видео страницу. Подскажите где ошибка. Заранее спасибо!...Вопрос № 45011: Здравствуйте, эксперты Assemblera!
У меня проблема с “методом прямого отображения в видеобуфер”.
Вот код программы:
CSEG segment
org 100h
_beg:
mov ax,0B800h
mov es,ax
mov di,0
mov ah,31
mov...
Вопрос № 44.984
Здравствуйте эксперты! На основе вируса изложенного в книге Калашникова, решил написать свой, который бы мог перехватывать 10h прерывание и запрещал бы изменять видео страницу. Подскажите где ошибка. Заранее спасибо!
Отвечает: Евгений Иванов
Здравствуйте, Долгавин Алексей Сергеевич!
Int_10 dd ? переставь выше.
вот так
Int_10_proc endp
Int_10 dd ?
Init:
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор) Россия, Нижний Новгород Тел.: +78313145721 Организация: M2Media.ru Адрес: Нижний Новгород, ул.Малая Ямская WWW:Eugene Ivanov ICQ: 214;88;90;76 ---- Ответ отправлен: 02.06.2006, 14:46
Отвечает: Пан Павел Константинович
Здравствуйте, Долгавин Алексей Сергеевич!
Всё дело в Int_10 dd ?, дело в том, что адрес прерывания сохраняется в эту переменную, НО! память выделенная для неё находится НЕ! в резидентной части, в результате команды типа: jmp dword ptr cs:[Int_10], call dword ptr cs:[Int_10] обращаются к памяти в которой на момент обращения может находиться как кооректный адрес прерывания, так и мусор. Следовательно поступаем так:
pop dx
pop ds
iret
Int_10_proc endp
Int_10 dd ? ;Теперь Int_10 dd ? находится в резидентной части.
Init:
или так:
pop dx
pop ds
iret
Int_10 dd ? ;Так более красиво с точки зрения интуитивности.
Int_10_proc endp
Init:
С, Уважением MnEm0n!C.
--------- Hello Worlds
Ответ отправил: Пан Павел Константинович (статус: Студент)
Ответ отправлен: 03.06.2006, 03:30 Оценка за ответ: 5
Вопрос № 45.011
Здравствуйте, эксперты Assemblera!
У меня проблема с “методом прямого отображения в видеобуфер”.
Вот код программы:
CSEG segment
org 100h
_beg:
mov ax,0B800h
mov es,ax
mov di,0
mov ah,31
mov al,1
mov es:[di],ax
mov ah,10h
int 16h
int 20h
CSEG ends
end _beg
(пример из книги Калашникова О.А. (respect!) «Ассемблер? Это просто!»)
.com файл создаётся успешно. Но результатом его выполнения становится пустая строка (а не необходимая рожица). В чём дело?
У меня стоит: Athlon, Windows XP SP2.
Отправлен: 02.06.2006, 18:48
Вопрос задал: STeiv (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Пан Павел Константинович
Здравствуйте, STeiv!