微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Windows如何保护转换到内核模式

Windows如何防止用户模式线程将cpu任意转换为内核模式?

我明白这些事情是真的:

>用户模式线程当通过NTDLL进行系统调用时,实际上会转换到内核模式.
>通过处理器特定的指令完成向内核模式的转换.

那么这些通过NTDLL的系统调用有什么特别之处?为什么用户模式线程不能伪造它,并执行特定于处理器的指令来转换到内核模式?我知道我在这里丢失了一些关键的Windows架构,这是什么?

你可能认为在用户模式下运行的线程正在调用Ring 0,但这不是实际发生的.用户模式线程导致由Ring 0代码捕获的异常.用户模式线程停止,cpu切换到内核/环0线程,然后可以检查用户模式线程的上下文(例如,调用堆栈和寄存器)以确定要执行的操作.在系统调用之前,它真的是一个例外,而不是专门用于调用ring 0代码的特殊异常.

如果您采取其他响应的建议并阅读intel manuals,您将看到syscall / sysenter不采取任何参数 – O / S决定会发生什么.你不能调用任意代码. WinNT使用函数号映射用户模式代码执行的内核模式功能(例如,NtOpenFile在我的XP机器上为fnc 75h(数字一直在变化,这是NTDll的一个作业是将函数调用映射到fnc号,放在EAX中,将EDX指向输入参数,然后调用sysenter).

原文地址:https://www.jb51.cc/windows/371126.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐