Скачать Резидентный перехватчик обращений к портам

18.06.1994
Скачать файл (16,66 Кб)

SIMIO - Simulator for I/O operation

Russian operation manual.

1. С чего все началось.

"Однажды вечером, когда делать было нечего" родилась идея - "Как бы, это самое, порт то протрассировать, на предмет получения протокола ?" ;)).

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

В связи с этим я рад предоставить Вам возможность облегчить все тяготы данного занятия. Ознакомясь с возможностями SIMIO - Вы не сможете с этим не согласиться.

2. Комплект

       simio.asm  - исходный текст программы;
       ioread.exe - программа для получения/засылки протокола
                    работы портов;
       test3.pas  - тест к программе.

3. Возможности программы.

Главная возможность программы - заключается в получении протокола работы трассируемого порта, в виде текстового файла, даже очень приемлемого и понятного вида.

Вторая возможность - это подмена программных обращений к трассируемым портам на свои, записанные опять-таки в текстовом файле, при этом программа даже не подозревает о замене и, к тому-же, "реальных" операций чтения из порта не происходит.

Естественно, необходимо отметить, что основную работу выполняет отладчик Soft-ICE, но мы, т.е. программа, усердно помогаем ему в этом.

Опции работы с программой:

      /S       - эмулировать порт (подмена операций IN и OUT)
      /R       - вести протокол работы порта (прозрачная мода)
      /I:XXXX  - размер буфера в байтах для подмены операций IN.
                  ( При чтении из трассируемого порта программе
                    передается значение из этого буфера. Размер
                    буфера по умолчанию 512 байт. )
      /O:XXXX  - размер буфера в байтах для получения протокола
                 работы трассируемого порта. По умолчанию 2 Кб.

P.S. При работе в режиме "/S" автоматически ведется протокол работы порта, если /O > 0000. Размеры I/O буферов необходимо задавать HEX виде.

И еще, буфера не зациклены, т.е при достижении конца буфера обработчик работает вхолостую. Весь необходимый размер памяти, отводимый под буфера, должен определяться самим пользователем исходя из обстановки, с помощью опций.

Вот пожалуй и все, скромно, но со вкусом. ;-))

4. Как работать с SIMIO ?

SIMIO перехватывает и обрабатывает следующие команды:

             0E4h - in  al,port
             0E5h - in  ax,port
             0E6h - out port,al
             0E7h - out port,ax
             0ECh - in  al,dx
             0EDh - in  ax,dx
             0EEh - out al,dx
             0EFh - out ax,dx


    +-------------------- ВНИМАНИЕ ! ---------------------+
    |  Она будет работать только под отладчиком SOFT-ICE. |
    +-----------------------------------------------------+

Не будем останавливаться на том, как работать с Soft-ICE, лишь акцентируем внимание на проблемах касающихся SIMIO.

После загрузки Soft-ICE в память запускаем наш перехватчик т.е. SIMIO с необходимыми опциями (описано выше). Т.к. SIMIO жестко перехватывает вектор 7Ah (см. исходник), то необходимо сделать следующее:

  1. В отладчике Soft-ICE командой ACTION необходимо установить вектор 7Ah на наш обработчик командой - ACTION 7A;
  2. Установить breakpoint на любые операции с любыми портами, например (BPIO 2f8 rw | BPIO 3f8 rw), подробнее см. в доке по SOFT-ICE.

После этого при любых операциях ввода/вывода в трассируемый порт SOFT-ICE будет генерировать наше прерывание и мы получим протокол работы портов в/в.

Если установлен режим эмуляции порта, то при операциях чтения из трассируемого порта, вместо данных реально прочитанных, будут браться данные подготовленные вами в буфере для ввода, с помощью программы IORead.exe. Т/о программа, которая читает порт будет обманута.

Несколько слов о сервисной программе IOREAD.EXE. Для удобной работы с обработчиком, а именно получения протокола работы в виде файла, и загрузки данных в буфер ввода из текстового файла. Данная программа автоматически определяет размер буферов и конвертирует данные в читабельную форму. Аналогичные действия происходят, при загрузке данных в буфер.

В заключение хотелось бы привести некоторые рекомендации по эксплуатации программ.

Возможный алгоритм работы:

  1. Снимаем протокол работы портов (опция /r);
  2. Запуская программу IOREAD.EXE, получаем файл результат IOREAD.LST.
  3. Корректируем необходимые команды в этом файле.
  4. Загружаем данные из этого файла в буфер ввода, с помощью IOREAD.EXE.
  5. После этого переинсталируем SIMIO на эмуляцию порта. Запускаем IOREAD.EXE с опцией /i.M
  6. И трассируемая программа получает то, что мы поместили в буфер.