段寄存器介绍
段寄存器的读写
mov ax, es ;只能读16位可见部分,Selecter
读写 LDTR 指令 SLDT/LLDT
读写TR 指令 STR/LTR //TSS
当执行指令 mov 段寄存器,Reg16 时, CPU会去查GDT表.
mov ds, ax ;写的时候写96位
mov dword ptr ds:[0x12345678], eax
我们真正写的地址是ds.base + 0x12345678
DS/CS/SS/ES/FS/GS/LDTR/TR
段寄存器的结构,共96位
16位 Selecter(可见) + 32位Base + 32位 Limit + 16 位 Attribute
struct Segment{ WORD Selector; WORD Attributes;//可读可写可执行 DWORD Base; DWORD Limit;}段名段选择子属性BaseLimitES0023可读可写00xFFFFFFFFCS001B可读可执行00xFFFFFFFFSS0023可读可写00xFFFFFFFFDS0023可读可写00xFFFFFFFFFS003B可读可写0x7FFDE000xFFFGS几个证明段寄存器结构的例子:
CS段不可写的实例:
mov ax,ss
mov ds,ax
mov dword ptr ds:[var], eax
base 属性证明:
mov ax,fs
mov gs,ax
mov dword ptr ds:[var] , eax
Limit 属性证明:
mov ax,fs
mov gs,ax
mov eax,gs:[0x1000] //高出了fs的Limit
mov eax,dword ptr ds:[0x7FFDE00 + 0x1000]
mov dword ptr ds:[var], eax
来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |