Re: 诡异的cs段描述符

Windows内核调试

诡异的cs段描述符


dbger 2014-05-21, 21:01 下午
Target: Windows 7 Professional 64bit

1: kd> r
rax=0000000000002501 rbx=fffff880009e8180 rcx=0000000000000001
rdx=000000000000008a rsi=0000000000002626 rdi=000000000000208a
rip=fffff80002ad6490 rsp=fffff88002f1ba88 rbp=0000000000000000
 r8=fffffa8001745000  r9=0000000000000089 r10=000000000250ab20
r11=fffff88002f1b970 r12=fffff88002f1bac0 r13=fffffa8002c27500
r14=fffffa8002c1e100 r15=0000000000000000
iopl=0         nv up ei pl nz na pe nc
cs=0010  ss=0018  ds=002b  es=002b  fs=0053  gs=002b             efl=00000202
nt!RtlpBreakWithStatusInstruction:
fffff800`02ad6490 cc              int     3
1: kd> rgdtr
gdtr=fffff880009f34c0
1: kd> dd fffff880009f34c0
fffff880`009f34c0  00000000 00000000 00000000 00000000
fffff880`009f34d0  00000000 00209b00 0000ffff 00cf9300
fffff880`009f34e0  0000ffff 00cffb00 0000ffff 00cff300
fffff880`009f34f0  00000000 0020fb00 00000000 00000000
fffff880`009f3500  cec00067 00008b9e fffff880 00000000
fffff880`009f3510  b0007c00 ff40f3fd 00000000 00000000
fffff880`009f3520  0000ffff 00cf9a00 00000000 00000000
fffff880`009f3530  00000000 00000000 00000000 00000000
1: kd> dg 10
                                                    P Si Gr Pr Lo
Sel        Base              Limit          Type    l ze an es ng Flags
---- ----------------- ----------------- ---------- - -- -- -- -- --------
0010 00000000`00000000 00000000`00000000 Code RE Ac 0 Nb By P  Lo 0000029b

Limit值为何为0, 一些段属性也很奇怪?

求调友指教!

Re: 诡异的cs段描述符


格蠹老雷 2014-05-22, 20:13 下午
要理解这个问题,首先需要了解“淡化段机制”的基本思想,在今天的软硬件设计中,已经普遍接受页机制作为主流的内存管理技术,对x86架构来说,因为段机制不可禁止,所以只能淡化它。
因为这个原因,32位到64位扩展时,根本没有加长段描述符,本来8个字节还是8个字节,于是就放不下0xffffffffffffffff这么长的边界值,怎么办呢,就约定下,用本来的一个保留位代表是是不是Long的段(64位段),用0代表无限边界,就是段这一关检验时,看到0边界,就全通过,有点像“节假日高速公路免费” :-)

Re: 诡异的cs段描述符


dbger 2014-05-22, 21:40 下午
谢谢指点,以前在32bit Windows时都是有个0xFFFFFFFF的段限;一下到64bit有点怪。Hoho~

张老师的《软件调试》里以32bit Windows为环境,《格蠹汇编》里虽然涉及到了一些64bit下的变化(如FS的角色由GS扮演),但比较少。

期待第二版能加入更多关于64bit的下CPU和OS的整块内容。:)

Powered by Community Server Powered by CnForums.Net