访问嵌入式机器上的 IO 端口 运行 Windows
Accessing IO ports on embedded machine running Windows
我无法进入 Nuvoton NCT6793D
的扩展功能模式。数据表说要将 87h
写入寄存器 2Eh
两次,但在尝试这样做时,我得到 Visual Studio 抛出的异常,即第 3 行是 'privileged instruction'。
在网上查了一下,我的理解是这条指令只能在内核模式下执行,但是我找不到任何方法来运行我在内核模式下的汇编代码。
.386
.stack 4096
.
.
.
main PROC
mov DX,2EH
mov AL,87H
out DX,AL <----
out DX,AL
.
.
.
我唯一的选择是编写内核模式驱动程序吗?
提前感谢您的热心回复。
是的,out
是特权指令。它必须在 Ring 0(内核模式)执行。
解决这个问题的唯一方法是制作 driver,Windows 具有用于开发 driver 的 Windows Driver Kit(它具有所有工具和许多示例)。
有一条跳转到特权模式的指令(实际上不止一条),当然你跳转到了内核中的一个入口点。
所有这些指令基本上都是对特定例程的调用,您不能提升代码,否则 OS 将完全被破坏。
我假设 Windows 以某种方式参与,因为您使用的是 Visual Studio 和 x86 代码,尽管标题指的是嵌入式机器。
Windows 不会向 read/write 用户模式应用程序的 IO 端口公开函数(有充分的理由)。
未测试(或者可能测试过但我不记得了)
我找到了一个 old driver I wrote for reading IO ports,它公开了可以像往常一样打开、读取和写入的“文件”\Device\iomem_io
(CreateFile
、ReadFile
、 WriteFile
).
读写at offsetX
(见SetFilePointer
)将read/writefrom/to端口X
,大小操作必须是 1、2 或 4 个字节。
RWEEverything comes with a driver that allows to read/write ports (and much more). It's commonly used by malwares that requires HW access, it is not documented and it is controller with IOCTLs (DeviceIoControl
) 必须从逆向工程中收集的代码。
注意如果你切换到Linux,你可以使用iopl
允许用户模式程序访问IO端口。这非常适合调试。
我无法进入 Nuvoton NCT6793D
的扩展功能模式。数据表说要将 87h
写入寄存器 2Eh
两次,但在尝试这样做时,我得到 Visual Studio 抛出的异常,即第 3 行是 'privileged instruction'。
在网上查了一下,我的理解是这条指令只能在内核模式下执行,但是我找不到任何方法来运行我在内核模式下的汇编代码。
.386
.stack 4096
.
.
.
main PROC
mov DX,2EH
mov AL,87H
out DX,AL <----
out DX,AL
.
.
.
我唯一的选择是编写内核模式驱动程序吗?
提前感谢您的热心回复。
是的,out
是特权指令。它必须在 Ring 0(内核模式)执行。
解决这个问题的唯一方法是制作 driver,Windows 具有用于开发 driver 的 Windows Driver Kit(它具有所有工具和许多示例)。
有一条跳转到特权模式的指令(实际上不止一条),当然你跳转到了内核中的一个入口点。
所有这些指令基本上都是对特定例程的调用,您不能提升代码,否则 OS 将完全被破坏。
我假设 Windows 以某种方式参与,因为您使用的是 Visual Studio 和 x86 代码,尽管标题指的是嵌入式机器。
Windows 不会向 read/write 用户模式应用程序的 IO 端口公开函数(有充分的理由)。
未测试(或者可能测试过但我不记得了)
我找到了一个 old driver I wrote for reading IO ports,它公开了可以像往常一样打开、读取和写入的“文件”\Device\iomem_io
(CreateFile
、ReadFile
、 WriteFile
).
读写at offsetX
(见SetFilePointer
)将read/writefrom/to端口X
,大小操作必须是 1、2 或 4 个字节。
RWEEverything comes with a driver that allows to read/write ports (and much more). It's commonly used by malwares that requires HW access, it is not documented and it is controller with IOCTLs (DeviceIoControl
) 必须从逆向工程中收集的代码。
注意如果你切换到Linux,你可以使用iopl
允许用户模式程序访问IO端口。这非常适合调试。