作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试进行一些模拟。在实际情况中,x86-based
工业 PC 使用 PC/104 连接到网卡。网卡被视为一个 I/O 设备。 IPC
上运行的代码使用 IN、OUT 等汇编指令来访问 I/O 端口。我想在我的笔记本电脑上模拟整个过程。
在 IPC
上运行的 c++
程序可以移植到我的笔记本电脑上,因为它们都是基于 x86 架构的。但是对于 IN/OUT 指令,我遇到了麻烦,因为没有真正的网卡连接到我的笔记本电脑。我使用 SystemC
模拟了网卡的逻辑。 我想知道是否有办法拦截对真实硬件的 I/O 端口访问(IN/OUT)并让虚拟化硬件的逻辑接管。
非常感谢您提供的任何帮助或建议。
最佳答案
如果带有 IN/OUT 指令的代码在用户程序中,您需要了解如何在同一程序(也许通过信号?)或内核中拦截和处理这些指令。 IN 和 OUT 是特权指令,默认情况下它们会在用户模式代码中引发异常 (#GP),然后内核会处理该异常。对于这种情况,您需要有自己的处理程序。在 Windows 中,这可以使用所谓的结构化异常处理 (AKA SEH) 来完成。
如果代码已经在内核中,那就很棘手了,因为那里的 IN/OUT 不会导致 #GP。
你不能用其他东西替换执行 IN 和 OUT 的例程,调用设备模拟代码吗?无论如何你都在模拟它,没有人关心它是 IN/OUT 还是其他。
关于c++ - 如何拦截 I/O 端口访问以实现硬件虚拟化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12832392/
我是一名优秀的程序员,十分优秀!