gpt4 book ai didi

c++ - 如何拦截 I/O 端口访问以实现硬件虚拟化

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:30:36 28 4
gpt4 key购买 nike

我正在尝试进行一些模拟。在实际情况中,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 还是其他。

参见 how this can be done with SEH .

关于c++ - 如何拦截 I/O 端口访问以实现硬件虚拟化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12832392/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com