Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Перехват векторов прерывания

Таблица векторов прерываний

Введение

Механизм подпрограмм (Динамический вызов)

1) Недостатком рассмотренного выше статического вызова является то, что в команде статического вызова подпрограммы присутствует адрес подпрограммы. Это - делает невозможным перемещение подпрограммы из одного места в памяти в другое, без перекомпиляции программы.

 

2) Статический вызов обычно применяют только к вызову внутренних программ. В данном случае – перекомпилировать совместно программу и вызываемую подпрограмму возможно.

 

3) Если речь идёт о вызове внешних подпрограмм – нужен другой способ вызова, а именно – такой механизм вызова подпрограмм, при котором в программе отсутствует явное указание адреса размещения подпрограммы.

 

4) И такой способ – есть! Динамический вызов с использованием команды INT #N

В данном случае N – не адрес, а условный номер подпрограммы. Говорят так "номер вектора прерывания через который вызывается подпрограмма" Почему говорят именно так "номер вектора прерывания"? Сейчас разберёмся.

 

5) Пока заметим: В ходе выполнения INT #N - все равно потребуется определять адрес размещения в памяти подпрограммы. Это определение будет происходить уже по ходу выполнения команды INT. Для определения адреса подпрограммы по ее номеру в ЭВМ ОС поддерживается специальная структура данных, специальный "справочник" - называемый "таблица векторов прерываний".

 

 

1) Таблица Векторов Прерываний (ТВП) для оперативной памяти ЭВМ - выполняет роль оглавления книги. Т.е. - для каждой программы и подпрограммы, вызываемой динамически – содержит адрес размещения в OЗУ соответствующей подпрограммы. В ходе выполнения INT #N по номеру подпрограммы – из ТВП будет выбираться адрес её размещения в OPE

 

2) Отдельные записи в ТВП принято называть векторами. Отсюда и терминология: "номер вектора прерывания".

 

Формат ТВП следующий:

 

 

3) Каждый вектор В0, В1.. содержат адрес вызываемой программы или динамически вызываемой подпрограммы.

 

4) n – число векторов ТВП

А0 – адрес ТВП (он никогда не изменяется), известен как аппаратуре так и программисту.

 

5) ТВП создается ОС во ходе загрузки и далее "поддерживается операционной системой" - для каждой очередной загружаемой в память программы или динамически вызываемой подпрограммы – в ТВП прописывается новый вектор.

 

 

3.14.3 Алгоритм INT #N

 

Команда INT от CALL отличается только в одном, в одной строчке алгоритма выполнения команды, в одной последней микрооперации. Теперь адрес не загружается в программный счётчик из атрибута команды, а по номеру вектора прерывания (считываемого из атрибута):

А) Производится вычисление адреса нужного вектора прерывания в ТВП.

В) С этого вычисленного адреса считывается, и в программный счётчик загружается адрес подпрограммы. Посмотрим:

  RC <– [PC]
  Дешифрация
  [SP] <– RF
  SP <– SP + LR
  PC <– PC + LK
  [SP] <– PC
  SP <– SP + LR
  PC <– [A0 + LB*N]

 

 

 

Микрооперации 1-7: полностью соответствуют микрооперациям команды CALL #Adr. [3.11.3]

 

Теперь о единственном отличии: Микрооперация 8 – загрузка в программный счетчик адреса подпрограммы.

 

Рассмотрим микрооперацию подробнее:

 

N – номер вектора прерывания;

LB – длина вектора;

LB*N – смещение вектора с номером N от начала ТВП;

A0+ LB*N – адрес в ОЗУ вектора N;

[A0+ LB*N] – содержимое вектора N, а именно адрес подпрограммы в памяти.

Вот это "содержимое вектора" как мы видим, и загружается в программный счётчик.

 

1) Механизм динамического вызова подпрограмм предоставляет новые возможности, а именно замена одной подпрограммы на другую подпрограмму. Прием, при помощи которого это выполняется называется "перехват вектора прерывания".

 

2) Пусть необходимо заменить выполнение подпрограммы А на выполнение подпрограммы В. Тогда программист выполняет следующие:

- размещает подпрограмму В – либо на месте А, либо - в любом другом свободном месте памяти;

- в ТВП, в векторе где был прописан адрес подпрограммы А - прописывается адрес подпрограммы В.

 

 

3) Использование механизма:

А) Модификация работы программ.

В) Динамическое управление программой в ходе ее выполнения (динамическая перегрузка) – вместо одних подпрограмм – подгружаются другие.

В) Вирусы используют перехват векторов, чтобы заменить "неправильные" J подпрограммы, на свои – правильные. J Выполняющие необходимые "вирусописателю" действия;

Г) Антивирусы – замечают присутствие вирусов, часто – именно анализируя ТВП и находя характерные изменения.

 

 

<== предыдущая лекция | следующая лекция ==>
Передача параметров через стек | Производительность и реактивность при механизме опроса
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 692; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.