Как перехватить доступ к порту ввода / вывода для виртуализации оборудования

Я пытаюсь сделать какую-то симуляцию. В реальном случае x86-based Промышленный ПК соединяется с сетевой платой с помощью ПК / 104. Сетевая плата рассматривается как устройство ввода-вывода. Код работает на IPC использует инструкции по сборке, такие как IN, OUT для доступа к портам ввода / вывода. Я хочу смоделировать все это на своем ноутбуке.

c++ программа работает на IPC может быть перенесен на мой ноутбук, так как они оба основаны на архитектуре x86. Но из-за инструкций IN / OUT я столкнулся с проблемами, поскольку к моему ноутбуку не подключена настоящая сетевая плата. Я смоделировал логику сетевой платы, используя SystemC, Мне интересно, есть ли способ перехватить доступ через порт ввода / вывода (IN / OUT) к реальному оборудованию и позволить логике виртуализированного оборудования вступить во владение.

Я ценю любую помощь или совет от вас.

2

Решение

Если ваш код с инструкциями IN / OUT находится в пользовательской программе, вам необходимо выяснить, как перехватывать и обрабатывать эти инструкции либо в этой же программе (возможно, с помощью сигналов?), Либо в ядре. IN и OUT являются привилегированными инструкциями, и по умолчанию они вызывают исключение (#GP) в коде пользовательского режима, и затем ядро ​​обрабатывает это исключение. Вы должны иметь свой собственный обработчик для этого случая. В Windows это можно сделать с помощью так называемой структурированной обработки исключений (AKA SEH).

Если код уже находится в ядре, это сложно, потому что IN / OUT там не вызывает #GP.

Не могли бы вы просто заменить подпрограммы, выполняющие IN и OUT, чем-то другим, вызовами кода эмуляции устройства? Вы все равно имитируете это, никого не волнует, если это IN / OUT или что-то еще.

Увидеть как это можно сделать с помощью SEH.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector