阅读:1956回复:12
请问win2k下如何访问4GB内存的顶端?
rt,也就是要访问BIOS地址译码的位置,DOS下是可以用FlatRealMode访问的,但在Win2K下有诸多问题。有哪位大侠之前做过类似工作或是知道的还望不吝赐教,在此先谢过了
|
|
沙发#
发布于:2004-12-14 09:56
访问....
读很容易... 写就不容易了...因为bios会设置某段rom读发是读rom.写却是写ram...或者其他... 所以用通常的方式读写...并不一定保证你就是读的真正的bios... 不过呢...是有办法作到的... 就是现在比较流行的winflash一类的程序.... 通过读写一个特殊的port(其实是两个)能读取跟写入bios... 首先你要找到这个port... 方式很简单...搜索f0000 到 fffff的物理内存...寻找@$AWDFLASH的字符串....找到了以后从字符串开始的2A offset的地方的word就是这个port值 读的时候... esi = 物理地址 edx = port al = 0x28 out edx,al out 0xeb,al eax,ecx,edx,ebx 从低到高4个dword放结果... 写的时候 ebx,ecx,eax 高16位,edx 高16位,esi从低到高放4个dword dx = port ax = 0x2f out dx,ax 以上 |
|
板凳#
发布于:2004-12-22 17:01
更想知道通用的做法,君上所述方法仅适用于AWARD的BIOS,对AMI的就不能那样用了啊.
|
|
地板#
发布于:2004-12-22 17:06
我知道SOFTICE的PEEK命令可以查看4GB顶端BIOS容量/2的物理地址,而且这部分地址没有对应的线性地址(PHYS命令).
或者我的问题换个方式问:哪位达人可以告知SOFTICE的PEEK是怎样实现的,或者给个思路也行.有劳各位. |
|
地下室#
发布于:2004-12-22 21:55
先进入ring0,然后。。。。。
|
|
5楼#
发布于:2004-12-23 19:04
以上方法对于ami得bios有部分也是通用得....
读取物理地址很容易... 不外忽就是加入一个地址映射而已.... 但是这并不能保证访问到得物理地址一定就是bios得rom.. 明白么..很可能被shadow到了你得内存ram.... 都知道bios设置里面能指定shadow得吧.... 但是...你要知道.... 不管是谁...softice也好..windows也要... 要做到真正得读写到bios.... 必须要跟北桥南桥以及mttr打交道... 必须要设置他们关上上面得shadow功能 这种方法得局限就是 每个型号得主板都可能要有一份代码... 想在不考虑北桥南桥得基础上读写到bios 还是我上面给得那个方法管用... |
|
6楼#
发布于:2004-12-26 20:32
访问4GB地址顶端的一种方法是用MmMapIoSpace,通常BIOS有一部份是可以之间访问的,要做到完全访问当然要参照南桥的说明打开保护才行
问题解决,自己re自己一下 tiamo兄的方法不适用于老的芯片老的Bios,但对比较新的Bios还是很好用的(很通用的),多谢答复 |
|
7楼#
发布于:2005-01-06 15:19
我在dos下读BIOS ROM映射的memory,结果发现bin file真的是有问题。用winhex比较,发现是中间有好几段读到的内容有误。是不是就是shadow没有关闭啊?我查了芯片组的datasheet,但是找不到相关的寄存器啊?请兄台指点
|
|
8楼#
发布于:2005-01-06 16:18
可以制作一个核心驱动,BIOS的位置一般如果在BIOS中设置shadow的话,他被映射到物理内存e0000-fffff的位置,如果用SOFTICE察看GDT描述符表时,好像有3个映射到这块地址,可以利用它来传送数据。
|
|
|
9楼#
发布于:2005-01-06 19:01
我想做的目前仅仅是在dos protect mode下读取bios rom中的数据,我所做的就是读FFF80000~FFFFFFFF之间的数据。但是读出数据中有几个数据块跟rom中的数据不符合,我用ru读,里面的数据都跟rom一致,为什么我读就有不对了呢,是不是还需要注意什么啊?
|
|
10楼#
发布于:2005-01-07 09:13
hi,daigaohui,可以将问题讲得更清楚一些吗?你说有几个数据块不同,那是几个?分别在什么位置上?ru是什么?
|
|
11楼#
发布于:2005-01-07 10:08
问题已经解决了,是我定义的数组太大了的缘故造成的。ru是ami出的debug工具啦。不过现在我的只能在ami的环境中使用,在Award下就全错了,郁闷
|
|
12楼#
发布于:2005-03-10 11:27
请问ichabod和tiamo兄,你对于AMI bios 在win2000下的高端地址读写都解决了么,那种通过SMI端口(28,29)好像只有针对AWARD的bios才有效果吧,而且还必须是严格遵循smbios规范才可以,对有ami该如何操作,小弟还想请教一二!
|
|