Пробую написать небольшой перехватчик прерывания 21h функция 09, код ниже. Запустил, вроде все отработало нормально. Дальше запустил небольшую программку которая используя 9-ю функцию 21-го прерывания выводит сообщение, по идее, должно показаться сообщение которое прописано в моем обработчике, а на самом деле выводится сообщение реальное из программы. Что не так, подскажите? Код (Text): .model tiny .code org 100h Begin: jmp Init int21hProc proc cmp al,9 je Ok_09 jmp dword ptr cs:[int21hVect] Ok_09: push ds push dx push cs pop ds mov dx,offset MyStr pushf call dword ptr cs:[int21hVect] pop dx pop ds iret int21hVect dd ? MyStr db "Abra$" int21hProc endp Init: mov ax,3521h int 21h mov word ptr int21hVect,bx mov word ptr int21hVect+2,es mov ax,2521h mov dx,offset int21hProc int 21h mov dx,offset Init int 27h end Begin
Все равно не работает ( Дело не в проверке, программы даже не переходят на мой перехватчик, они вызывают оригинальный.
SparK Опиши методику проверки. Я проверял так: 1. в твоей программе после заменил al на ah, собрал com-файл; 2. написал программу Код (Text): .model tiny .code org 100h Begin: jmp Init msg db 'Hello, world!$' Init: mov ah,9 mov dx,offset msg int 21h mov ax,4C00h int 21h end Begin собрал com-файл; 3. запустил cmd (сижу под xp); 4. запустил свою программу - увидел "Hello, world!"; 5. запустил твою программу, она отработала; 6. повторно запустил свою - увидел "Abra".
У меня XP XTreme SP3. 1. запустил cmd; 2. запустил программу для проверки выдает "Резидент в памяти не обнаружен!"; 3. запустил перехватчик, он отработал; 4. повторно запустил проверку - выдало "Резидент в памяти не обнаружен!". Я архив прикрепил там есть и перехватчик и программа для проверки.
SparK запустил программу для проверки ... повторно запустил проверку Это ты про test12? Imho она не имеет ни какого отношения к проверке наличия перехватчика int21h_fn_9. Для его проверки надо использовать test10. test12 проверяет rezid12.
нет, для 21-го прерывания я запускал test10, а для 10-го test12. rezis12 это уже 2-й перехватчик и он тоже не работает.
Все я понял почему перехватчик не работал. Я запускал .COM файл перехватчика из Винды, а 27-е прерывание восстанавливает все оригинальные обработчики после выхода из DOS среды. Поэтому то у меня и не работали все перехватчики. Спасибо всем кто пытался помочь )