分享
 
 
 

Windows 95/98下直接访问物理内存

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

Windows 95/98下直接访问物理内存(1)

[ 作者: 不详 添加时间: 2001-9-11 8:24:28 ]

在很多情况下,我们都有直接访问物理内存的要求,如在实时高速数据采集系统中,

对I/O板上配置的存储器的访问。但是,为了保证系统的安全性和稳定性,操作系统

并不提倡应用程序直接访问硬件资源, 因此,随着操作系统的进步,导致了目前存在

的这样一个不幸的事实: 以前在DOS下很容易实现的特定物理内存的读写操作,在Windows

下却变得相当困难。

本文主要讨论如何在Windows 95/98下实现物理内存的直接读写操作。为了论述清

楚这个问题,有必要叙述保护模式的寻址方式以及W indows 95/98的内存管理方式。

Windows 95/98内存管理方式

Windows 95/98工作在32位保护模式下,保护模式与实模式的根本区别在于CPU寻址方

式上的不同:尽管两者对应的内存地址均为"段地址:偏移量"形式,但在保护模式下,

"段地址"代表的值已不再是实模式中段的起始基准地址了;对于CS、DS、ES、SS寄存

器,在实模式下,这些寄存器的值左移4位,再加上偏移量,即得到物理地址,而在保护

模式下,这些寄存器的值为"段选择符",它实际上是一个查全局描述符表(G DT)或局

部描述符表(LDT)的索引,据此在GDT或LDT找到对应的段描述符,从而获得段的基址及

类型等信息,再根据偏移量,才能得到线性地址。如果操作系统没有采用分页机制,

那么得到的线性地址即为物理地址,否则,线性地址需要进一步经过分页机制才能得

到物理地址。这就是保护模式下的"段页式寻址机制"。

Windows 95/98使用4GB的虚拟内存地址空间,应用程序访问内存使用虚拟地址,从虚

拟地址到物理地址的转换过程如图1所示: 图1 虚拟地址到物理地址的转化过程

对于图1中的分页机制,Windows 95/98采用两级页表结构,如图2 所示。图2 采用的

分页机制的两级页表结构

从图2可知,线性地址被分割成页目录条目(PDE)、页表条目(PTE) 、页偏移地址(Off set)

三个部分。当建立一个新的WIN 32进程时,Wi ndows 95/98会为它分配一块内存,并

建立它自己的页目录、页表,页目录的地址也同时放入进程的现场信息中。当计算一

个地址时,系统首先从控制寄存器CR3中读出页目录所在的地址(该地址为物理地址,

并且是页对齐的),然后根据PDE得到页表所在的地址,再根据PTE得到包含了实际Code

或Data的页帧, 最后根据Offset访问页帧中的特定单元。

常用内存段的段选择符

从上述所介绍的Windows 95/98采用的分段、分页机制可看出,要想在Windows 95/98

下直接访问物理内存,关键是得到欲访问物理内存所在的内存区域对应的段选择符。

一般说来,要求直接访问的物理内存都与实模式下能够寻址的内存有关(即DOS能直

接访问的1M物理内存)。在Windows 3.X中,Microso ft给出了DOS常用段的段选择符,

如_000 0H(未公开),_B800H,_F000H( 已公开),等等,均可以在KERNEL中找到,应用

程序可以直接使用这些段选择符,实现物理内存的直接访问。而在Windows 95/98中,

Microsoft 却不在任何文档中提供这些段的预定义,在KERNEL中也不提供相应的段选

择符。但是,Windows 95 /98确实给DOS下的这些常用内存段定义了相应的段描述符。

通过SoftIce 3.02 for Win dows 95/98,我们得到了关于LDT的如下信息:

...... :ldt

LDTbase=80003000 Limit=3FFF

……

1007 Data16 00000C90 0000FFFF 3 P RW

100F Data16 00000000 0000FFFF 3 P RW

1017 Data16 00000400 0000FFFF 3 P RW

101F Data16 000F0000 0000FFFF 3 P RW

1027 Data16 000A0000 0000FFFF 3 P RW

102F Data16 000B0000 0000FFFF 3 P RW

1037 Data16 000B8000 0000FFFF 3 P RW

103F Data16 000C0000 0000FFFF 3 P RW

1047 Data16 000D0000 0000FFFF 3 P RW

104F Data16 000E0000 0000FFFF 3 P RW

……

其中,每一行对应一个段描述符,第一栏为其段选择符,第二栏为段描述符的类型,

第三栏为段的基地址(线性地址),第四栏为段的限长 ,第五栏为段描述符的特权级,

第六栏标志对应段是否存在于内存中, 第七栏表示段的访问权限。

可以看出,这些段的基地址与DOS下的常用内存段完全吻合,并且均为16位的数据段,

限长为64K(0XFFFF),供应用程序访问,都存在于内存中,可读写。实践证明,这些段

就是D OS的常用内存段,也就是说, 这里的线性地址即为物理地址。因此,可以用这

些段选择符对相应的物理内存进行访问。

从程序运行的健壮性考虑,不应该直接应用上述段选择符,而应该用GetThreadSelec

torEntry()函数得到欲访问物理内存对应的段选择符,该API函数的原型定义为

BOOL GetThreadSelectorEntry (

HANDLE hThread,

// handle of thread that contains selector

DWORD dwSelector,

// number of selector value to look up

LPLDT_ENTRY lpSelectorEntry

// address of selector entry structure

);

其中,LDT_ENTRY的结构定义如下

typedef struct _LDT_ENTRY { // ldte

WORD LimitLow;

WORD BaseLow;

union {

struct {

BYTE BaseMid;

BYTE Flags1;

BYTE Flags2;

BYTE BaseHi;

} Bytes;

struct {

DWORD BaseMid : 8;

DWORD Type : 5;

DWORD Dpl : 2;

DWORD Pres : 1;

DWORD LimitHi : 4;

DWORD Sys : 1;

DWORD Reserved_0 : 1;

DWORD Default_Big : 1;

DWORD Granularity : 1;

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有