我在进入Nuvoton NCT6793D的扩展功能模式时遇到了问题。数据表要求将87h写两次给正则用户2Eh,但是尝试这样做时,Visual抛出了一个异常,即第3行是“特权指令”。
在网上查找它时,我的理解是,该指令只能在内核模式下执行,但我无法找到在内核模式下运行组装代码的任何方法。
.386
.stack 4096
.
.
.
main PROC
mov DX,2EH
mov AL,87H
out DX,AL <----
out DX,AL
.
.
.编写内核模式驱动程序是我唯一的选择吗?
预先感谢您的友好答复。
发布于 2019-06-26 10:19:55
是的,out是一种特权指令。它必须在环形0(内核模式)下执行。
解决这一问题的唯一方法是开发驱动程序,Windows拥有用于开发驱动程序的视窗驱动套件 (它拥有所有的工具和许多示例)。
有一个指令可以跳入特权模式(实际上不止一个),但是当然,您可以跳到内核中的一个入口点。
所有这些指令基本上都是对特定例程的调用,您不能提升代码,否则操作系统将被完全破坏。
--我认为在某种程度上涉及到了,因为您使用的是Visual和x86代码,尽管标题是指嵌入式机器。
Windows不向用户模式应用程序公开读取/写入IO端口的函数(原因非常充分)。
未经测试(或者可能测试过,但我不记得了)
我找到了一个我为读取IO端口而编写的旧驱动程序,它公开了可以像往常一样打开、读取和写入的“文件”\Device\iomem_io (CreateFile、ReadFile、WriteFile)。
读和写at X (参见SetFilePointer)将从/向端口X读写,操作的大小必须为1、2或4字节。
RWEverything来了允许读写端口(还有更多的)的和司机在一起。它通常被需要HW访问的恶意软件使用,没有文档,它是带有)代码的控制器,必须从反向工程中收集。
Note如果切换到Linux,可以使用iopl来允许用户模式程序访问IO端口。这对调试是很好的。
https://stackoverflow.com/questions/56767811
复制相似问题