Re: 请问CPU页目录的基地址的问题?

Windows内核

请问CPU页目录的基地址的问题?


merry 2009-03-13, 19:45 下午

OS:Winxp sp2

据我所知,windbg查看页目录的基地址有2种方法:

1)使用!process命令观察DirBase项数据
2)使用 r cr3命令

可是令我奇怪的是,
1)DirBase项数据和r cr3显示的结果不一样
2)按道理作为页目录的基地址,应该低12 bit位应该全为0,可这2个结果都不是这样。

我是用livekd进行本机调试的,进入livekd后没有运行其他命令,分别输入!process命令和r cr3命令发现这个情况的。

请问一下原因?谢谢!

 

 

Re: 请问CPU页目录的基地址的问题?


格蠹老雷 2009-03-14, 11:12 上午
这是由于启用了CPU的PAE功能,参见下面的文章:
http://advdbg.org/blogs/advdbg_system/articles/627.aspx

Re: 请问CPU页目录的基地址的问题?


merry 2009-03-17, 09:05 上午

Hi!Raymond,

   你提到的文章我仔细看了后,又查阅 Windows Internals 4th,有2个问题请教一下:

  1.PAE是不是在Winxp 默认情况下是启用的

 2.在《软件调试》一书中的calc.exe页面地址转换中,保存"123456789"缓冲区的这个地址,是逻辑地址,还是线性地址?

   从书中实例来看,获得这个地址后就向页面物理地址转换,应该是线性地址,但是在windbg中调试应用程序看到的应该是逻辑地址。

   因此,请Raymond能否再解释一下,谢谢!

Re: 请问CPU页目录的基地址的问题?


aa1ss2 2009-03-24, 15:12 下午


!process 和 r指令显示的DirBase都是一样的,如果不一样,那么就是在不同的进程环境下。

至于低12位不为0,是因为软件没有把标志区分开来,使用的时候因该加个掩码去掉,标志的作用请参考书或者上面的连接,那里都有详细的说明。


这个是我机子上面看记事本的情况


kd> !process
PROCESS 81f078a8 SessionId: 0 Cid: 0600 Peb: 7ffd3000 ParentCid: 01dc
DirBase: 03ab01e0 ObjectTable: e1182418 HandleCount: 95.
Image: notepad.exe
VadRoot 82023cc8 Vads 80 Clone 0 Private 289. Modified 407. Locked 0.
DeviceMap e184e3b8
Token e111fd48
ElapsedTime 00:07:44.000
UserTime 00:00:00.031
KernelTime 00:00:08.609
QuotaPoolUsage[PagedPool] 70724
QuotaPoolUsage[NonPagedPool] 4320
Working Set Sizes (now,min,max) (1204, 50, 345) (4816KB, 200KB, 1380KB)
PeakWorkingSetSize 1204
VirtualSize 36 Mb
PeakVirtualSize 37 Mb
PageFaultCount 1295
MemoryPriority BACKGROUND
BasePriority 8
CommitCharge 498

THREAD 81f07630 Cid 0600.05f4 Teb: 7ffdf000 Win32Thread: e175e588 RUNNING on processor 0

kd> r cr3
cr3=03ab01e0

Re: 请问CPU页目录的基地址的问题?


格蠹老雷 2009-03-24, 22:23 下午
XP的SP2开始默认启用PAE,观察内核文件的完整文件名就可以知道系统是否启用PAE,比如下面的内核就是PAE版本的:
lkd> lm vm nt
start end module name
804d7000 806cdc80 nt (pdb symbols) d:\symbols\ntkrnlpa.pdb\CF7B79A8CE864FCF8ABF248F0B69F4C91\ntkrnlpa.pdb
Loaded symbol image file: ntkrnlpa.exe
Image path: ntkrnlpa.exe
Image name: ntkrnlpa.exe
在保护模式下,逻辑地址是指段选择子和偏移,因为Windows下的普通数据段和代码段的基地址都是0,所以逻辑地址的偏移值就等于线性地址,二者已经没有什么差异。

Powered by Community Server Powered by CnForums.Net