我添加了一些编译干净,刚刚收到此Windows错误的代码:
--------------------------- (MonTel Administrator) 2.12.7: MtAdmin.exe - Application Error --------------------------- The exception Privileged instruction. (0xc0000096) occurred in the application at location 0x00486752.
我即将继续寻找一个bug,我期待它是我所做的愚蠢的事情,这恰好产生了这个消息.代码编译干净,没有错误或警告.EXE文件的大小已经增长到1,454,132字节并且包含指向的链接ODCS.lib
,但它是纯粹的C到Win32 API,DEBUG打开(在Windows 2000上的P4上运行).
为了回答这个问题,特权指令是处理器操作码(汇编指令),它只能在"管理员"(或Ring-0)模式下执行.这些类型的指令往往用于从Windows内核访问I/O设备和受保护的数据结构.
常规程序以"用户模式"(Ring-3)执行,不允许直接访问I/O设备等...
正如其他人提到的,原因可能是损坏的堆栈或混乱的函数指针调用.
当使用指向无效数据的函数指针时,通常会发生这种情况.如果你有代码来破坏你的返回堆栈,也会发生这种情况.跟踪这类错误有时候很难处理,因为它们通常难以重现.
特权指令是IA-32指令,只允许在Ring-0(即内核模式)中执行.如果你在用户空间中遇到这种情况,你要么得到一个非常旧的EXE,要么是一个损坏的二进制文件.