Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Разумеется, без сложностей здесь не обходится. Поскольку в процессе инициализации BIOS вектора прерывания могут переустанавливаться многократно, одной лишь модификации таблицы прерываний (т.е. классического способа перехвата) будет явно недостаточно. Да, мы можем изменить far-указатель по адресу: 0000h:10h*sizeof(DWORD) == 0000h:0040h,перенаправив его на свой собственный обработчик, но… через некоторое время контроль за INT 10h будет утерян. Чтобы этого избежать, необходимо установить аппаратную точку останова на запись этой ячейки памяти. В этом нам помогут отладочные регистры семейства DRx. Регистры Dr0-Dr3 хранят линейный физический адрес точки останова, а Dr7 определяет условия, при которых она срабатывает, заставляя процессор генерировать прерывание INT 01h, на котором должен находиться наш обработчик, выполняющий повторную «экспроприацию» INT 10h у системы.
Пример работы с отладочными регистрами приведен ниже.
Листинг 1. Перехватчик передает управление нашему коду в момент загрузки Boot-сектора
; перехватываем INT 01h
MOV ax, CS
XOR bx,bx
MOV DS,bx
; смещение нашего обработчика
MOV [bx], offset our_vx_code
; относительно сегмента 0000h
MOV [bx+2],bx
MOV DS, ax