Радиоперехват

Xakep, номер #036, стр. 036-052-1

Шпионская запись одной радиопередачи

RainFerocious & Zealot

Звучит Need For Speed: Porsche Unleased - Cold fusion power (soundtrack)

D.J.: Здравствуйте, уважаемые радиослушатели! В эфире передача "LLP", что означает "Low Level Programming". Наш сегодняшний гость - Zeal0t (Громкие нескончаемые аплодисменты под музыку Fluke-Absurd). Hi Zeal0t!!!

Z.: Hi!!!

D.J.: О чем вы нам хотите сегодня рассказать?

Z.: Я хотел бы рассказать о небольшой программке, которая замедляет ход системных часов в Windows.

D.J.: !!????

Z.: Ну, то есть это скорее пример такой программы, которая иллюстрирует, на что способен ассемблер. Это будет полезно как начинающим, так и продвинутым программистам.

D.J.: Ну хорошо, расскажите поподробней, plz.

Z.: Начнем с того, что попытаемся представить, что это вообще такое - замедление или ускорение времени. Представим себе события от мыши. Например, система должна распознавать, когда произошло событие "двойной щелчок", а когда было два последовательных одинарных нажатия. Понятно, что в первом случае интервал между нажатиями был меньше, поэтому системные часы обновлялись чаще, и мы можем различить события.

D.J.: Речь наверно идет о таймере?

Z.: Верно, cистемные часы обновляются с помощью специального устройства - таймера, входящего в состав любой компьютерной системы. Таймер - весьма сложная система, включающая в себя целых три устройства - три канала таймера, каждый из которых может работать в одном из шести режимах.

D.J.: Наверное и управлять им сложно?

Z.: Все в мире относительно. Управление таймером осуществляется путем вывода одного байта в порт 43h. Рассмотрим назначение бит в этом байте.

биты 7-6: если не 11 - номер программируемого канала (мы рассмотрим программирования канала 0)

биты 5-4:

00 - фиксация текущего значения счетчика

01 - чтение/запись только младшего байта

10 - чтение/запись только старшего байта

11 - чтение/запись сначала младшего, а потом старшего байта

биты 3-1: режим работы канала (всего их шесть, но мы рассмотрим только режим 3)

(011) - генератор прямоугольных импульсов, в котором работают по умолчанию каналы 0 и 2 таймера.

бит 0: формат счетчика:

0 - двоичное - шестнадцатибитное число (0000-0FFFFh)

1 - двоичное - десятичное число (000-9999)

D.J.: Мы про DOS или Windows?

Z.: Сначала как было, потом как есть. Итак, в старой доброй системе MS-DOS канал 0 таймера генерил прерывание IRQ0 с частотой приблизительно 18.2 раза в секунду. Для этого необходимо выполнить следующие действия:

1 - в порт 43h таймера нужно послать команду 00110110b, то есть установить режим 3 для канала 0, запись сначала младшего, потом старшего байта и

2 - переслать байт 0FFh в порт 42h (младший байт)

3 - переслать байт 0FFh в порт 42h (старший байт)

D.J.: А!!! Вы инициализируете начальное значение регистра-счетчика?

Z.: Да, и равно оно 0FFFFh. После этого таймер немедленно уменьшает введенное число к нулю со скоростью 1 193 180 раз в секунду. При достижении счетчиком нуля канал 0 таймера вызывает прерывание IRQ0, которое и обновляет системные часы. Отсюда следует очевидный вывод: если мы хотим убыстрить движение времени, то можно задать другое начальное значение, например, 7FFFh и тем самым заставить его генерить IRQ0 чаще...

Содержание  Вперед на стр. 036-052-2

Выпуски журнала "Xakep"
Журнал Хакер. Содержание номера #001Журнал Хакер. Содержание номера #002Журнал Хакер. Содержание номера #003Журнал Хакер. Содержание номера #004Журнал Хакер. Содержание номера #005Журнал Хакер. Содержание номера #006Журнал Хакер. Содержание номера #007Журнал Хакер. Содержание номера #008Журнал Хакер. Содержание номера #009Журнал Хакер. Содержание номера #010Журнал Хакер. Содержание номера #011Журнал Хакер. Содержание номера #012Журнал Хакер. Содержание номера #013Журнал Хакер. Содержание номера #014Журнал Хакер. Содержание номера #015Журнал Хакер. Содержание номера #016Журнал Хакер. Содержание номера #017Журнал Хакер. Содержание номера #018Журнал Хакер. Содержание номера #019Журнал Хакер. Содержание номера #020Журнал Хакер. Содержание номера #021Журнал Хакер. Содержание номера #022Журнал Хакер. Содержание номера #023Журнал Хакер. Содержание номера #024Журнал Хакер. Содержание номера #025Журнал Хакер. Содержание номера #026Журнал Хакер. Содержание номера #027Журнал Хакер. Содержание номера #028Журнал Хакер. Содержание номера #029Журнал Хакер. Содержание номера #030Журнал Хакер. Содержание номера #031Журнал Хакер. Содержание номера #032Журнал Хакер. Содержание номера #033Журнал Хакер. Содержание номера #034Журнал Хакер. Содержание номера #035Журнал Хакер. Содержание номера #036Журнал Хакер. Содержание номера #037Журнал Хакер. Содержание номера #038Журнал Хакер. Содержание номера #039Журнал Хакер. Содержание номера #040Журнал Хакер. Содержание номера #041Журнал Хакер. Содержание номера #042Журнал Хакер. Содержание номера #043Журнал Хакер. Содержание номера #044Журнал Хакер. Содержание номера #045Журнал Хакер. Содержание номера #046Журнал Хакер. Содержание номера #047Журнал Хакер. Содержание номера #048Журнал Хакер. Содержание номера #049Журнал Хакер. Содержание номера #050Журнал Хакер. Содержание номера #051Журнал Хакер. Содержание номера #052Журнал Хакер. Содержание номера #053Журнал Хакер. Содержание номера #054Журнал Хакер. Содержание номера #055Журнал Хакер. Содержание номера #056Журнал Хакер. Содержание номера #057Журнал Хакер. Содержание номера #058Журнал Хакер. Содержание номера #059Журнал Хакер. Содержание номера #060Журнал Хакер. Содержание номера #061Журнал Хакер. Содержание номера #062Журнал Хакер. Содержание номера #063Журнал Хакер. Содержание номера #064Журнал Хакер. Содержание номера #065Журнал Хакер. Содержание номера #066Журнал Хакер. Содержание номера #067Журнал Хакер. Содержание номера #068Журнал Хакер. Содержание номера #069Журнал Хакер. Содержание номера #070Журнал Хакер. Содержание номера #071Журнал Хакер. Содержание номера #072Журнал Хакер. Содержание номера #073Журнал Хакер. Содержание номера #074Журнал Хакер. Содержание номера #075Журнал Хакер. Содержание номера #076Журнал Хакер. Содержание номера #077Журнал Хакер. Содержание номера #078Журнал Хакер. Содержание номера #079Журнал Хакер. Содержание номера #080Журнал Хакер. Содержание номера #081Журнал Хакер. Содержание номера #082Журнал Хакер. Содержание номера #083Журнал Хакер. Содержание номера #084Журнал Хакер. Содержание номера #085Журнал Хакер. Содержание номера #086Журнал Хакер. Содержание номера #087Журнал Хакер. Содержание номера #088Журнал Хакер. Содержание номера #089Журнал Хакер. Содержание номера #090Журнал Хакер. Содержание номера #091Журнал Хакер. Содержание номера #092Журнал Хакер. Содержание номера #093Журнал Хакер. Содержание номера #094Журнал Хакер. Содержание номера #095Журнал Хакер. Содержание номера #096Журнал Хакер. Содержание номера #097Журнал Хакер. Содержание номера #098Журнал Хакер. Содержание номера #099Журнал Хакер. Содержание номера #100Журнал Хакер. Содержание номера #101Журнал Хакер. Содержание номера #102Журнал Хакер. Содержание номера #103Журнал Хакер. Содержание номера #104Журнал Хакер. Содержание номера #105Журнал Хакер. Содержание номера #106Журнал Хакер. Содержание номера #107Журнал Хакер. Содержание номера #108Журнал Хакер. Содержание номера #109Журнал Хакер. Содержание номера #110Журнал Хакер. Содержание номера #111Журнал Хакер. Содержание номера #112Журнал Хакер. Содержание номера #113Журнал Хакер. Содержание номера #114