阅读:1122回复:2
vxd求助!
我用vc编写了一个测试读写内存的程序,应用程序中提供操作的地址和数据,然后调用vxd程序,在vxd程序中进行读写操作,但是我提供的是线性地址,读或写时会发生兰屏现象,如EC101000这个地址。
同时在不同的PC机上读写同一个地址的情况也不同。WHY? 是否将线性地址进行转换为物理地址,或如何作。还望大虾给指点一二。谢谢。 |
|
沙发#
发布于:2002-03-12 20:34
1.不知你是否了解保护模式的分页机制,操作系统自动将闲置的的内存交换到硬盘上,并将该页面置为无效。这时如果你的VxD恰好访问该页面,就会出现GPF(一般保护性错误),因此你在读写时应校验该页面是否有效。
2.至于将线性地址转换为物理地址,也要用到页表。我记得:线性地址的最高10位是其页目录(cr3中有其基址)的索引值(用来查出页表的基地址);中间10位是其在页表中的索引(注意:页表中有一位标志该页表是否有效,若无效则表示该地址所在页面以被交换到硬盘上,故无实际的物理地址),可查出该线性所在页的物理地址的基地址,线性地址的最低12位是其在物理基地址的偏移量。这样就可将线性地址转换为物理地址。 以上是我的所知道的一点知识,有问题请告知 |
|
板凳#
发布于:2002-03-13 08:51
1、需要将线性地址映射物理地址
2、vtools\\c\\mapdev的例子和你写的类似,参考一下就可以了 |
|
|