Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

《软件调试》书友

帖子发起人: holly   发起时间: 2008-07-31 16:10 下午   回复: 3

Print Search
帖子排序:    
   2008-07-31, 16:10 下午
hollyhunter 离线,最后访问时间: 2009/10/10 9:42:36 holly

发帖数前50位
注册: 2008-07-14
发 贴: 22
少见的好书,正在拜读中... ...,略有疑问。
Reply Quote

虽然写了不少程序,读了不少的书,象软件调试这样的书还是难得一见,好久没有读到心动的感觉了。

在2.7.5节,58页的使用WinDBG观察分页机制中,按照张老师的试验指导,亲身体验下,分页的效果,遇到不同的疑问之处

直接使用 dd calc!gpszNum l1  得到结果

01014db0  000a5548

dd 000a5548 因为使用的也是123456789,当然为

000a5548  00320031 00340033 00360035 00380037
000a5558  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的型号相关,请朋友们指教!

 


IP 地址: 已记录   报告
   2008-07-31, 17:04 下午
casechen 离线,最后访问时间: 2009/1/27 17:05:28 casechen

发帖数前50位
注册: 2008-07-28
发 贴: 26
Re: 少见的好书,正在拜读中... ...,略有疑问。
Reply Quote
张老师就这个问题在他的BLOG中做了解释。
你的猜测是对的,因为我也遇到了这个问题。XP SP2是开启了PAE,可以寻址到36位,因此,页目录增加了一层。并且为了表示36位地址,用了64位地址线,所以在搜索PDE时应该乘8,其他的就差不多了。
至于查看是不是开启了PAE,在张老师书的P44页有相关说明,可以查看CR4 REGISTER的第6位,也就是书中标记的CR4[5]。
在张老师这里班门弄斧了。继续学习中................
IP 地址: 已记录   报告
   2008-07-31, 17:13 下午
casechen 离线,最后访问时间: 2009/1/27 17:05:28 casechen

发帖数前50位
注册: 2008-07-28
发 贴: 26
Re: 少见的好书,正在拜读中... ...,略有疑问。
Reply Quote
我只是就我的理解回复的,不代表张老师哦!呵呵
具体还是请看看张老师的BLOG。他讲解的全面透彻多了。
让张老师见笑了。
IP 地址: 已记录   报告
   2008-08-01, 23:57 下午
skyworth 离线,最后访问时间: 2009/12/15 16:03:09 skyworth

发帖数前25位
注册: 2008-06-07
发 贴: 55
Re: 少见的好书,正在拜读中... ...,略有疑问。
Reply Quote
Win XP SP2+以上的系统默认会开启 NoExecute 选项,而该选项会隐含打开PAE选项,从而导致线性地址都是64位的。具体情况请看Raymond的博文,里面解释得很清楚。至于小数点,应该是版本问题吧。
IP 地址: 已记录   报告
高端调试 » 图书 » 《软件调试》书友 » 少见的好书,正在拜读中... ...,略有疑问。

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.