+-------------------------------------+
| ђ¬ SIMIO v.2.00 ¬ђ |
| -= Simulator for I/O operation =- |
| (C) 1993 by WssSoft |
| SIMIO - резидентный перехватчик |
| на тему: обращений к любым портам. |
| Работает под управлением отладчика |
| Soft-ICE. Основное достоинство - |
| трассирует порт (на IN-ны и OUT-ты) |
+-------------------------------------+
| Coded by: Wasilyev S.S. |
+-------------------------------------+
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.
6. И трассируемая программа получает то, что мы поместили
в буфер.
Вот пожалуй и все !
With best regards
Sergey
|