酒后跟儿子当成老公了下载最新版2023-酒后跟儿子当成老公了官网手机下载
标签:
因为当执行类似前面对段寄存器进行修改的指令:MOVDS,AX时,CPU会先查表,根据AX的值(段选择子)来决定查找GDT还是LDT
但在Windows中LDT并没有被使用,于是AX的值(段选择子)是用来决定查询表中的哪个位置
***
##GDT
###什么是GDT
GDT全称:GlobalDescriptorTable,为全局描述符表,表中存储的数据项为段描述符
***
###GDT的数量
一个处理器对应一个GDT
***
###定位GDT
大致了解了GDT是一张表,接下来则要定位到这张表,查看其内容
想要定位GDT表的位置,可以通过gdtr寄存器来定位
gdtr寄存器存储了GDT表的起始位置和GDT表的大小
***
###通过windbg定位GDT
通过在windbg中输入下列指令查看有关GDT的信息:
```
rgdtr//读取gdt表的起始位置
rgdtl//读取gdt表的大小
```
***
***
得到了:
得到了GDT表的起始位置后,就可以查看GDT表的内容了:
```
dq0x8003f000
```
***
##段描述符
知道了查询的表为GDT后,再说说GDT表存储的数据项:段描述符
***
###什么是段描述符
段描述符顾名思义就是用来描述段的信息的,每个段对应一个段描述符
***
###段描述符的数据宽度
每个段描述符的数据宽度为:64位=8字节(QWORD)
***
###定位段描述符
通过段选择子可以定位到对应的段描述符
如何定位,则要先了解段选择子的结构
***
##段选择子
###什么是段选择子
段选择子顾名思义就是用来选择段的,通过段选择子可以定位到对应的段描述符
***
###段选择子的结构
***
***
###**Index**
索引,真正用来索引段描述符的数据
***
###TI
表指示器,用来确定选择GDT(全局描述符表)还是LDT(局部描述符表)
在Windows上并不使用LDT表,故TI恒等于0
***
###RPL
请求的特权等级,会和请求的段描述符的特权等级进行比较,留作后续补充说明
***
###根据段选择子定位段描述符
了解了段选择子的结构后,就可以通过段选择子来定位段描述符了
例子:以段选择子=0x001B为例
首先将段选择子转换为二进制:0000000000011011
将其按段选择子的结构填入:
拿到索引之后就可以定位对应的段描述符了得到的索引为3
对应的段描述符地址=GDT表首地址+索引×段描述符长度=GDT表首地址+索引×8(注意这里的单位为字节,64位=8字节)
所以:对应的段描述符地址=0x8003f000+3×8=0x8003f000+24=0x8003f000+0x18=0x8003f018
***
##加载段描述符至段寄存器
除了MOV指令,还可以使用LES、LSS、LDS、LFS、LGS指令修改寄存器.
CS不能通过上述的指令进行修改,CS为代码段,CS的改变会导致EIP的改变,要改CS,必须要保证CS与EIP一起改,在后续的笔记会提到
***
下面以lds为例子,观察指令执行前后寄存器的变化
```
#include<stdio.h>
#include<windows.h>
charbuffer[6]={0x44,0x33,0x22,0x11,0x1B,0x00};
intmain(){
_asm{
pushds
ldseax,fwordptrds:[buffer]//fword为6字节
popds
}
return0;
}
```
***
###下断点观察
***
###执行前
***
###执行后
***
###对比执行前后
***
###得出指令功能
LDS指令格式为:LDSOPRD1,OPRD2
OPRD1用来接收OPRD2的低(OPRD2)字节
OPRD2的高2字节为段选择子,通过段选择子修改DS
其它指令:LES、LSS、LFS、LGS也是一样的格式,只不过修改的段寄存器不同罢了
***
##内存寻址关系一览图
下面给出内存寻址的流程中,GDT、段描述符、段选择子的关系图:
***
以MOVEAX,DWORDPTRDS:[0x123456]为例
根据DS获得SegmentSelector(段选择子):0x23(在逆向脱壳之保护模式学习二段寄存器中获得的,不同机器可能不同)
根据地址获得Offset(偏移):0x123456
然后通过段选择子查询GDT(全局描述符表)得到对应的SegmentDescriptor(段描述符)
通过段描述符可以得到Base(基地址)=0(DS段寄存器的Base为0)
最终要访问的内存地址为:Base+Offset=0+0x123456=0x123456(期间也会根据段描述符进行一系列校验,这里暂且不提)
***
##说明
该篇笔记主要介绍了如何通过段选择子定位到对应的段描述符并补充了段选择子的结构和修改段寄存器的指令
但关于段描述符的结构还没有深入介绍
前面引出的问题也尚未完全解决,通过前面的学习得知段寄存器剩下的80位是通过段描述符来填充的
但是段描述符的长度只有64位,如何填充80位。
这样不知道过了几世几劫,因有个空空道人访道求仙,打从这大荒山无稽崖青埂峰下路过,了解到这段过往历史,故向那石头说道:“石兄,你这一段故事,据你自己说有些趣味,故编写在此,意欲问世传奇。
风轻轻,云轻轻
一路遥遥向茶城
翠竹深处飞角檐
青瓦人家笑祖孙
菜青青,豆青青
黑纱遮阳铁皮茂
青天朗见甘蔗林
即兴吟成新农村
......2018.12.24.15:20,过景谷课里村
赞一个土壕呀这里还藏了一首呢。瑟瑟发抖持续挖矿是王道,投机取巧先靠边站吧。而马德里媒体否认这一消息,则是为了避免在国家德比打响前,皇马出现军心动摇的现象。
。我们希望通过这样的宣传,能够帮您更加了解山庄的功能特色,澜溪山庄虔诚的欢迎您的到来。
其二,波光粼粼的权利斗争,康熙雍正乾隆,三朝,贾府,兴,衰,回光返照,灭。欢迎交流,评论,私信。让我想到了马克思的肖像,你看,思想家的气质。如花生、小米、小麦、玉米、黄豆,做好的豆豉,萝卜干,梅菜……。