anonymous
написал 27 июля 2005 года в 05:39 (722 просмотра)
Ведет себя
неопределенно; открыл 1814 темы в форуме, оставил 5575 комментариев на сайте.
Необхадимо написать драйвер для ДОС, который перехватывает команду «out dx,al» и если надо меняет «al» и посылает уже исправленное значение.
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
Я знаю два способа:
1) установить флаг трассировки, ловить прерывание 1 и искать нужные команды.
2) vm86, если перевести процессор в защищённый режим, а дос выполнять в режиме эмуляции 8086, то можно отлавливать исключение при попытке что-то вывести в порты ввода-вывода.
На эту тему можно писать очень много… И много написано. Очень рекомендую поискать в статьях (да и на форуме тоже) на wasm.ru
довольно просто.. в теории. ;)
перевести процессор в защищённый режим, настроить для vm необходимое io_map (или как оно правильно, в общем, битовый массив разрешённых к использованию портов ввода/вывода)
после чего настраиваешь обработку соответствующего исключения (надо сказать, что тут ещё гнеобходимо делать проверку на то, а не прерывание ли это от какого устройства).
ну, это в теории
а на практике… може проще дебаггером найти это место, заменить код команды на int3 и обработать внутри этого исключения?
на практике, можно ещё и так:
порытся на wasm.ru, и просто в google, найти пример, и его использовать. Дебуггером проще, но не по пионерски. Да и не факт, что проще: если программа тщательно скрывает момент обращения к портам или, на самом деле, обращается BIOS, то разобраться и написать с нуля эмулятор, может быть и проще и быстрее.