什么是特权教育?

Dav*_*ris 26 c debugging winapi odbc

我添加了一些编译干净,刚刚收到此Windows错误的代码:

---------------------------
(MonTel Administrator) 2.12.7: MtAdmin.exe - Application Error
---------------------------
The exception Privileged instruction.

 (0xc0000096) occurred in the application at location 0x00486752.
Run Code Online (Sandbox Code Playgroud)

我即将继续寻找一个bug,我期待它是我所做的愚蠢的事情,这恰好产生了这个消息.代码编译干净,没有错误或警告.EXE文件的大小已经增长到1,454,132字节并且包含指向的链接ODCS.lib,但它是纯粹的C到Win32 API,DEBUG打开(在Windows 2000上的P4上运行).

Ben*_*oit 34

为了回答这个问题,特权指令是处理器操作码(汇编指令),它只能在"管理员"(或Ring-0)模式下执行.这些类型的指令往往用于从Windows内核访问I/O设备和受保护的数据结构.

常规程序以"用户模式"(Ring-3)执行,不允许直接访问I/O设备等...

正如其他人提到的,原因可能是损坏的堆栈或混乱的函数指针调用.


Dan*_*iel 7

当使用指向无效数据的函数指针时,通常会发生这种情况.如果你有代码来破坏你的返回堆栈,也会发生这种情况.跟踪这类错误有时候很难处理,因为它们通常难以重现.


Ana*_*tts 7

特权指令是IA-32指令,只允许在Ring-0(即内核模式)中执行.如果你在用户空间中遇到这种情况,你要么得到一个非常旧的EXE,要么是一个损坏的二进制文件.


Dav*_*ris 5

正如我所怀疑的那样,我所做的事情很愚蠢。我想我以两倍的速度解决了这个问题,因为上面消息中的评论中有一些线索。感谢那些人,尤其是那些在应用程序早期指出某些内容覆盖堆栈的人。实际上,我在这里找到了几个答案,比我标记为回答问题的帖子更有用,因为他们为我提供线索并让我排队看哪里,尽管我认为它最好地总结了答案。

事实证明,我刚刚添加了一个按钮,该按钮超过了保存一些工具栏按钮信息(在堆栈中)的数组的最大大小。我已经忘记了

#define MAX_NUM_TOOBAR_BUTTONS (24)

甚至存在!