虽然写了不少程序,读了不少的书,象软件调试这样的书还是难得一见,好久没有读到心动的感觉了。
在2.7.5节,58页的使用WinDBG观察分页机制中,按照张老师的试验指导,亲身体验下,分页的效果,遇到不同的疑问之处
直接使用 dd calc!gpszNum l1 得到结果
01014db0 000a5548
dd 000a5548 因为使用的也是123456789,当然为
000a5548 00320031 00340033 00360035 00380037000a5558 002e0039 00000000 00000000 00000000... 不同之处是 calc会增加的小数点也在其中 002e(.)0039(9)
打开另一个WinDBG实例,使用!process 0 0得到
...PROCESS 899b5340 SessionId: 0 Cid: 0fd4 Peb: 7ffdb000 ParentCid: 0b74 DirBase: 0ad006c0 ObjectTable: e4a5ec08 HandleCount: 51. Image: calc.exe...
!dd 0ad006c0 (此处的地址内容看起来与书中的差异较大)
lkd> !dd 0ad006c0# ad006c0 1488c801 00000000 141dd801 00000000# ad006d0 64f6e801 00000000 146cb801 00000000# ad006e0 15614801 00000000 73e1d801 00000000# ad006f0 1500e801 00000000 1546b801 00000000# ad00700 bae72720 00000000 00000000 00000000# ad00710 00000000 00000000 00000000 00000000
看上去似乎是64位的寻址,或者其他原因,此处的内容显然也是分页的目录表,但是页目录项的属性为0x801,而且看起来是64位的但是系统是WinXP SP2的环境啊。猜测可能因为CPU是AMD Athlon 64 X2 Dual双核的原因,但是此处的属性无法再按照书中继续下去了有朋友了解此种情况下如何验证分页机制吗?我尝试仍然按照低12位页表属性来计算也就是1488c000 + a5*8(书中为4,因为书中明确指定了4字节的页目录,不过按照4结果也一样是空的内容),得到的是空内容
#1488c528 00000000 00000000 00000000 00000000也就是说在最后这一步不知道怎样得到正确的calc中gpszNum的物理地址,此处是否与CPU的型号相关,请朋友们指教!