Page 109 - 4875
P. 109

Виклик  старого  обробника  можна  здійснювати  за  допомогою
                           команд:

                                   pushf
                                   call [dword ptr old_ip]

                                  Крім  того  дозволяється  використовувати  адресу  попереднього
                           обробника, безпосередньо в коді нового обробника.

                                   pushf
                                   db 9A                             ;код машинної команди
                           call FAR
                                                                      9
                                   old_int dd ?                      ;
                                   -
                                   iret

                                  Для    випадку     коли    новий     обробник     переривань
                           використовується  для  розширення  можливостей  старого  обробника
                           замість виклику call FAR використовується jmp FAR

                                   new_int proc far
                                   -
                                   jmp FAR dword ptr[old_ip]
                                   new_int ENDP

                                  Для  забезпечення  перевірки  наявності  резидентної  програми  в
                           пам’яті використовують наступні методи:
                                  1  Сканування  послідовності  із  МСВ  блоків,  визначення  їх
                                     власників,  та  порівняння  імені  власника  блоку  з  іменем
                                     програми,  що  запустилась  (резидентної  програми,  що
                                     виконує перевірку).
                                  2  Використання  спеціальної  сигнатури,  що  розташована  в
                                     коді резидентної програми.
                                  3  Використання „відлуння” в послідовностях ISR.

                           9
                            old_int – адреса старого обробника.















                                                           108
   104   105   106   107   108   109   110   111   112   113   114