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

WinDbg

帖子发起人: merry   发起时间: 2009-03-25 11:26 上午   回复: 3

Print Search
帖子排序:    
   2009-03-25, 11:26 上午
merryzhao 离线,最后访问时间: 2017/2/21 12:41:06 merry

发帖数前25位
注册: 2008-09-26
发 贴: 61
Windows几乎不使用LDT表,对吗?
Reply Quote

在最近学习IA-32的分段和分页机制时,看到一句话:

   “ Windows XP几乎不使用LDT表!”

请问这句话对吗?  能否用windbg验证这句话吗? 

(使用dg命令好像看不到描述表s位的状况  )

谢谢!


IP 地址: 已记录   报告
   2009-03-25, 23:09 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: Windows几乎不使用LDT表,对吗?
Reply Quote
因为这句话中很好的使用了限定语,所以是对的。但这个问题解释起来话很长。简单来说,基于IA-32结构的32位Windows是可以不使用LDT的,因为使用页机制足够了,但是因为16位的Windows(3.x, 9x)使用LDT,为了兼容,NT中还是支持LDT的,或者说还是偶尔使用LDT的,这在很多地方都可以看到影子。比如:内核中有nt!NtSetLdtEntries函数。每个进程的_EPROCESS结构和_KPROCESS中有描述LDT的字段:
lkd> dt _KPROCESS -y ldt
nt!_KPROCESS
+0x020 LdtDescriptor : _KGDTENTRY
lkd> dt _EPROCESS -y ldt
nt!_EPROCESS
+0x150 LdtInformation : Ptr32 Void
这些设施曾经存在安全问题,一度成为人们关注的热点:
http://research.eeye.com/html/advisories/published/AD20040413D.html
IP 地址: 已记录   报告
   2009-03-26, 14:24 下午
merryzhao 离线,最后访问时间: 2017/2/21 12:41:06 merry

发帖数前25位
注册: 2008-09-26
发 贴: 61
Re: Windows几乎不使用LDT表,对吗?
Reply Quote
Hi!Raymond
谢谢你的热心帮助!
我是在学校图书馆看到你在《程序员》杂志发表的《windbg必读》一文,开始了解windbg的,后来又购买了你的masterpiece《软件调试》一书继续学习。
祝你工作开心!因为工作不开心,怎能有好心情!:)
希望有一天你能在我《软件调试》一书上签名留念,呵呵!

在IA-32中,每个任务都有自已的局部描述符表LDT,它包含自已的代码段,数据段,堆栈段,也包含该任务使用的一些门描述符。随着任务的切换,LDT也跟着切换。(我觉得这里指的是任务软切换,因为windows不使用TSS段硬切换,对吗?)
从OS(WinXP)角度来看,现在LDT主要存放的是什么内容,有什么用处?
谢谢!


IP 地址: 已记录   报告
   2009-03-26, 21:25 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: Windows几乎不使用LDT表,对吗?
Reply Quote
Windows做普通的任务切换时,是不使用CPU的硬件任务切换机制(TR寄存器和TSS),但是在发生双重错误异常和NMI中断时,还是会使用。
LDT是一张表,用来存放段描述符。对于普通的Windows进程,它们都不使用LDT表,NT系列Windows之所以还保持对LDT的支持,主要是为了兼容。
对一个还在学校读书的学生来说,你的问题够深的了。
IP 地址: 已记录   报告
高端调试 » 软件调试 » WinDbg » Re: Windows几乎不使用LDT表,对吗?

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