是这样的.学习了下那几个16位寄存器的用处.知道了涉及保护模式的意思.所以能想做下验证.过程如下:
1.首先 windbg中用VM调试虚拟机(虚拟机是2003) r gdtr得到结果是gdtr=8003f000.FS=0030那么按照计算应该是:0030的二进制的表示是ring 0级.GDT中.索引是6.那么8003f000+6*8.可是DD的结果确实如下:
kd> r
eax=00000001 ebx=00000806 ecx=80896d4c edx=000003f8 esi=00000000 edi=13238076
eip=8086cf18 esp=80894580 ebp=80894590 iopl=0 nv up ei pl nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000202
nt!RtlpBreakWithStatusInstruction:
8086cf18 cc int 3
kd> r gdtr
gdtr=8003f000
kd> dd 8003f000+8*6
8003f030 f0000001 ffc092df 00000fff 0040f300
8003f040 0400ffff 0000f200 00000000 00000000
8003f050 48b00068 80008989 49180068 80008989
8003f060 30c0ffff 00009202 80003fff 0000920b
8003f070 700003ff ff0092ff 0000ffff 80009a40
8003f080 0000ffff 80009240 00000000 00009200
8003f090 00000000 00000000 00000000 00000000
8003f0a0 00000000 00000000 00000000 00000000
这ffdff000这不是PCR的地址么?为什么会这样呢?
2.因为我是新手.心想可能是因为现在调试的是系统.而网上说的情况.是ring 3的情况.所以OD用启动新进程的方式调试DEPENDS.EXE.断下来的地方 正好是个FS的指令 mov eax,fs:[0] 看下面写的是:fs:[00000000]=[7ffdf000]=0012ffe0.但是右键转到表达式输入8003f038(现在FS是003B).不让查看.显示指定地址无内存.可是.为什么0D就能知道FS:[0]是[7ffdf000]呢?这个换算过程中也是需要查看8003F038才能知道的啊.他为什么就能读这个地址呢?而且换用WINDGB调试本地进程的方式.打开新进程和attach的方式也都是R命令显示错误.dd 8003F038也显示一串问号.那到底怎么读呢?
http://bbs.pediy.com/showthread.php?t=86249 看10楼中。他为什么可以直接dd 8003f000+8*6呢?
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)