了解内核的高手进!

niefuhua 2005-10-24 08:48:48
小弟最近在看Windows核心编程,对于第三章的内核非常不解。疑问如下:
(1)内核拥有哪些特权?为什么它有那些特权?
(2)我们平常所谓的内核都在一个进程中吗?内核进程是不是也拥有4G的虚拟地址空间,或者说内核根本就不使用虚拟地址空间?
(3)内核代码可以随意访问一般程序的虚拟地址空间中的内容吗?
(4)API术语一般代码还是内核代码?如果是一般代码,它又是怎么进入内核代码的?
(5)我们的程序怎样才能拥有和内核同样高的权限?

欢迎大家发表评论,共同探讨!谢谢
...全文
492 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
niefuhua 2005-10-25
  • 打赏
  • 举报
回复
强!虚心学习。
漂白猪 2005-10-25
  • 打赏
  • 举报
回复
MARK
hwj692502 2005-10-25
  • 打赏
  • 举报
回复
学习
niefuhua 2005-10-24
  • 打赏
  • 举报
回复
joncooper(小强) :

按你的说法,每个应用程序的2G-4G里面的内容都是一样的了,是不是?
所有的应用程序都通过内存映射文件机制共享2G-4G空间的内容。?

大家说的系统究竟指的时是哪几个进程,我们可以通过资源管理器看见吗?

我问一个比较弱智的问题,大家别见笑,我见有ring0,ring3,那么有没有ring1,ring2之类的?
joncooper 2005-10-24
  • 打赏
  • 举报
回复
(1)内核所拥有的特权就是ring0级的特权。他是由系统维护并创建,所以会有比较高的权限。
(2)内核并不是在一个进程中,或者说你这种说法是完全错误的。每一个进程都有4G的虚拟空间可以使用。但是高2G或高1G的地址空间是你所不能使用的(我是说编一个ap程序)。这里边就存放系统创建的所有的内核对象。
(3)答案是可以,但要是特定进程上下文中。也就说,当前的低2G中是某一个进程的空间。
(4)api 就好像一个窗户,你把要求递进去,他把结果传出来。你在ring3级,窗户里边就是ring0级。一般进入ring0级是通过中断来完成的。
(5)我们的程序在正常情况下永远也不会有ring0级别。
niefuhua 2005-10-24
  • 打赏
  • 举报
回复
是不是说我们只有通过内核才能访问硬件?有没有可能我们不通过操作系统内核就能直接访问硬件的方法?
teli_eurydice 2005-10-24
  • 打赏
  • 举报
回复
不了解,学习。。。。。。。。。。。。。。。
oyljerry 2005-10-24
  • 打赏
  • 举报
回复
API,表面上是这个函数,实际最终实现都是NTXXX,通过内核函数来实现的,因而可以访问到内核
当然,也可以从ring3跳到ring0
oyljerry 2005-10-24
  • 打赏
  • 举报
回复
内核有操作系统维护,运行在ring0,具有最高的权限
rageliu 2005-10-24
  • 打赏
  • 举报
回复
学习来的...
DrSmart 2005-10-24
  • 打赏
  • 举报
回复
Intel CPU 分四个权限等级 ,windows仅用ring0 和ring 3.前者的权限最大,解决软件权限的最好方法就是写驱动,当然如果不是windows xp sp2和windows 2003 sp1的话,最简单的就是(不用驱动)\Device\PhysicalMemory漏洞进入ring0,不过有了新的sp补订包,当然也可以用修改windows的加载器 NTLDR的IDT GDT之类的东东,你可以分析win2000源代码,更改gidt特权就可以了,其实也有内核级的api,均以KeXXX、PsXXX、ZwXXX、NtXXX,的native api,普通api的调用都要通过调用这些native api来完成功能,大多是未公开的,你可以看看泄露的win2000源代码研究,这些api要动态加载。呵呵,这是windows 的内核文件ntoskrnl.exe和hal.dll,里面东西很好,对应源代码的private文件夹下的东东
qrlvls 2005-10-24
  • 打赏
  • 举报
回复
以下答案不一定完全正确,仅供参考:

(1)内核可以修改一些特殊的寄存器,可以调用部分只有在内核模式下能够调用的CPU指令,之所以拥有这样的特权是因为现在的CPU在设计时也要结合操作系统的安全性进行考虑,因此能够通过一些特殊的方法切换模式,至少我了解到ARM是这样的

(2)实际上一个进程的执行在不同的时候可以分别处于内核态和用户态,但Windows是将核心的操作较集中地在一些特殊的进程中处理,但普通的进程也是可以通过特定的方法切换到内核态的,对于内核来说更多的是区分分页内存或非分页内存,应该和虚拟地址空间不完全是同一概念

(3)虚拟地址空间实际上是通过硬件结合软件的一个映射过程来完成的,只要它愿意,它是可以根据设计原则来访问任意的存储空间

(4)API 是指 Application Programming Interface,你也可以将 DDK 中在内核态中使用的函数称为 API,如 ZwXXX, NtXXX, 你可以将他们理解为内核态的,如果要仔细理解系统内核态与用户态的层次问题,不妨看看Windows NT 的 WDM 驱动程序模型,或许会有些帮助

(5)在 Windows NT 系统中建议按照系统的 WDM 之类的规范通过驱动程序等方法来获取更高的权限
wshcdr 2005-10-24
  • 打赏
  • 举报
回复
学习
Featured 2005-10-24
  • 打赏
  • 举报
回复
1 内核是操作系统中的,操作系统想让它拥有最高的权限,它就有了
(让它运行在ring0)

4 API也是ring3的,但API一般通过调用运行在ring0的驱动完成
当用户模式程序需要读取设备数据时,它就调用Win32 API函数,如ReadFile:Win32子系统模块(如KERNEL32.DLL)通过调用平台相关的系统服务接口实现该API,而平台相关的系统服务将调用内核模式支持例程。在ReadFile调用中,调用首先到达系统DLL(NTDLL.DLL)中的一个入口点,NtReadFile函数。然后这个用户模式的NtReadFile函数接着调用系统服务接口,最后由系统服务接口调用内核模式中的服务例程,该例程同样名为NtReadFile。

5网上很多从ring3跳得ring0的
fisker0303 2005-10-24
  • 打赏
  • 举报
回复
我理解的内核就是一些由操作系统维护的数据结构。
wzh0591 2005-10-24
  • 打赏
  • 举报
回复
就是关注,打个标记,日后自己好找。请查阅CSDN的使用帮助。
zmb99 2005-10-24
  • 打赏
  • 举报
回复
mark是什么意思?
loucai 2005-10-24
  • 打赏
  • 举报
回复
mark
oyljerry 2005-10-24
  • 打赏
  • 举报
回复
系统需要这个地址空间,供内核代码、设备驱动程序代码、设备I / O高速缓存、非页面内存池的分配和进程页面表等使用。实际上M i c r o s o f t将内核压缩到这个2 G B空间之中
oyljerry 2005-10-24
  • 打赏
  • 举报
回复
应用程序分配的4G虚拟内存中,有2G是被系统占用了的,其他的2G才给应用程序自己使用,当然这个大小可以通过一些方法来调整的
加载更多回复(2)

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧