- 1、本文档共23页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Windows进程的用户空间.PDF
漫谈兼容内核之二十一:
Windows 进程的用户空间
毛德操
进程的用户空间是应用软件活动的舞台,所以搞清楚 Windows 进程用户空间的格局和
轮廓对于深入理解 Windows 进程的运行有着重要的意义。而对于兼容内核的开发者,则这
个问题更是非搞清楚不可,因为开发兼容内核的意图就是要让 Windows 应用软件得以在
Linux 系统上运行。其实,在前面的一些漫谈中,随着当时话题的开展也曾讲到过有关这个
问题的一些大概,但是一方面只是散见于各处,不够集中;另一方面也不够系统和完整,实
际上也因而不够详细和确切;因此有必要专门把它作为一个话题加以比较系统、完整的深入
介绍。有道是“耳闻为虚,眼见为实”,对于我们来说,所谓“眼见”就是要见到有关的源
代码。当然,我们所能见到的只是 RreactOS 的源代码,好在各种迹象表明 RreactOS 与
Windows 在这方面也是相当贴近和一致的。
我们先从几个宏定义着手:
#define MM_HIGHEST_USER_ADDRESS *MmHighestUserAddress
#define MM_USER_PROBE_ADDRESS *MmUserProbeAddress
#define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
#define KI_USER_SHARED_DATA 0xffdf0000
#define SharedUserData \
((KUSER_SHARED_DATA *CONST) KI_USER_SHARED_DATA)
在 ReactOS 的代码中,每当需要引用用户空间的上限、即最高地址时,一般就把
MM_HIGHEST_USER_ADDRESS 用作常数,但实际上这是个宏操作,是在引用指针
MmHighestUserAddress 的内容。与此相似的还有 MM_USER_PROBE_ADDRESS ,实际上
是在引用指针MmUserProbeAddress 的内容。这两个指针的内容是在内核初始化时设置好的:
MmInit1(…)
{
……
MmUserProbeAddress = 0x7fff0000;
MmHighestUserAddress = (PVOID)0x7ffeffff;
……
}
就是说,应用软件在用户空间可以访问的最高地址(虚拟地址)是 0x7ffeffff,从 0x7fff0000
开始就不能访问了。一般文献中讲 Windows 系统中用户空间与系统空间的分界线是
0而这里之所以是 0x7fff0000 而不是 0是因为在分界下面留了 64KB
的空间不让访问,以此作为隔离区。
应用软件在用户空间可以访问的最低地址是 MM_LOWEST_USER_ADDRESS ,这是个
常数,定义为 0x10000,就是第一个 64KB 边界的地方,而从 0 开始的 64KB 也是不让访问
的。
还有个常数 KI_USER_SHARED_DATA 更是值得一说。这个常数定义为 0xffdf0000,是
一个区间的起点。这个区间按说是在系统空间,却又划出来让用户空间的程序访问,就好像
是用户空间的一小片飞地。这片飞地的目的是用来让用户空间的程序访问内核中的一些数
据,好像是在系统空间的地皮上挖了口井。而且,这个区间是由系统空间和所有用户空间共
享,也就是为所有进程所共享,所以这个常数名为 KI_USER_SHARED_DATA 。那么这个“井”
里有些什么数据呢?上面的宏定义为此定义了一个数据结构 KUSER_SHARED_DATA ,并
定义了一个相应的结构指针 SharedUserData,让它指向这个地址:
typedef struct _KUSER_SHARED_DATA {
ULONG TickCountLowDeprecated;
ULONG TickCountMultiplier;
vo
您可能关注的文档
- MPLAB新建工程编译说明书.pdf
- oftheClassics绘事后素经典解释与哲学研究.PDF
- Oracle人力资源基础.PDF
- Orcad常用快捷键.pdf
- OTDR盲区全面解读.pdf
- O型圈正确应用表.pdf
- PACS系统中显示器质量控制方法的研究.PDF
- PADS生成CAM文件的详细教程.pdf
- PBNI环境搭建及初步使用.pdf
- PID功能块使用基础.pdf
- 2025年贵州工业职业技术学院高职单招高职单招英语2016-2024历年频考点试题含答案解析.docx
- 2025年西昌民族幼儿师范高等专科学校高职单招职业适应性测试近5年常考版参考题库含答案解析.docx
- 2025年西藏警官高等专科学校高职单招语文2018-2024历年参考题库频考点含答案解析.docx
- 2025年贵州工商职业学院高职单招职业技能测试近5年常考版参考题库含答案解析.docx
- 2025年贵州工商职业学院高职单招职业适应性测试近5年常考版参考题库含答案解析.docx
- 2025年贵州农业职业学院高职单招数学历年(2016-2024)频考点试题含答案解析.docx
- 2025年贵州工商职业学院高职单招高职单招英语2016-2024历年频考点试题含答案解析.docx
- 2025年贵州工商职业学院高职单招语文2018-2024历年参考题库频考点含答案解析.docx
- 2025年许昌职业技术学院高职单招数学历年(2016-2024)频考点试题含答案解析.docx
- 2025年许昌职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析.docx
文档评论(0)