操作系统开启分段并进入保护模式-创新互联

在这里插入图片描述

创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于网站设计、成都网站制作、湛河网络推广、小程序制作、湛河网络营销、湛河企业策划、湛河品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们大的嘉奖;创新互联公司为所有大学生创业者提供湛河建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com段基地址

32位的地址,如果没开启分页,指的是当前段所在的物理地址,否则是分页前的虚拟地址

G(Granurality)

值为1表示段界限以4K为单位,否则以字节为单位

段界限

描述段的大小size-1,单位由G决定。

D/B
  • 对于代码段,1表示32位的偏移或操作数,0表示16位的偏移或操作数
  • 对于栈段,1表示使用esp,0表示使用sp
L

表示64位,32位下置0

AVL

留给操作系统自己使用的,意义自定义

P

1表示当前段有效,0表示当前段无效

DPL(descriptor priority level)

表示当前段的优先级

S

1表示数据段或代码段,0表示系统段

type 数据段
  • 可执行
  • 扩展方向
  • 可写
  • 最近是否访问
代码段
  • 可执行
  • 是否依从
  • 可读
  • 最近是否访问
安装GDT

使用指令lgdt m48,m48为内存地址,在16位下为16位,32位下为32位,其地址里面存有如下数据
4字节addr|2字节size,size是GDT的大小减去1,addr为GDT所在的内存地址。

小端序

由于小端序有点违反直觉,要注意一下

段选择子

在这里插入图片描述
16位的段选择指,高13位表示该段在GDT表中是第一个段描述符,共有 2 13 − 1 2^{13}-1 213−1个有效的段描述符,开始的第一个是NULL空描述符。

TI

表示是从全局描述符表找,还是从局部描述符表找

RPL

与DPL相关,请求特权级,暂时为0

本代码用到的4个有效段描述符

DPL=0,G=0,S=1,D=1,P=1

  1. 空描述符,intel要求的,留个非法NULL地址访问用
  2. 代码段,地址0x00007c00,type=0x8;limit=0x1ff
  3. 数据段,地址0x00b8000,type=0x2,limit=0xffff
  4. 栈段, 地址0x00000000, type=0x6,limit=0x7a00,数据向下扩展,栈的特性。有效地址从0x00007c00-0x00007a00,注意,当段属性向下扩展时,处理器检查的是下界,而向上扩展时,检查的是上界,这也就是说,其实地址从0xffffffff-0x00007a00,处理器均不会报错。
times 8 db 0
    dd 0x7c0001ff,0x00409800
    dd 0x8000ffff,0x0040920b
    dd 0x00007a00,0x00409600
[bits 16]
    mov ax,cs      
    mov ss,ax
    mov sp,0x7c00
    mov dword [cs:gdt+0x7c02],gdt+0x7c06
    lgdt [cs:gdt+0x7c00]
    in al,0x92                         ;南桥芯片内的端口 
    or al,0000_0010B
    out 0x92,al                        ;打开A20
    cli
    mov eax,cr0
    or eax,1
    mov cr0,eax                        ;设置PE位
    jmp dword 0x0008:flush
[bits 32]
flush:
    mov cx,0x10         ;加载数据段选择子(0x10)
    mov ds,cx
    mov byte [0x00],'P'  
    mov byte [0x02],'r'
    mov byte [0x04],'o'
    mov byte [0x06],'t'
    mov byte [0x08],'e'
    mov byte [0x0a],'c'
    mov byte [0x0c],'t'
    mov byte [0x0e],' '
    mov byte [0x10],'m'
    mov byte [0x12],'o'
    mov byte [0x14],'d'
    mov byte [0x16],'e'
    mov byte [0x18],' '
    mov byte [0x1a],'O'
    mov byte [0x1c],'K'
    mov cx,0x18         ;加载堆栈段选择子
    mov ss,cx
    mov esp,0x7c00

    mov ebp,esp                        ;保存堆栈指针 
    push byte '.'                      ;压入立即数(字节)
    
    sub ebp,4
    cmp ebp,esp                        ;判断压入立即数时,ESP是否减4 
    jnz loop                          
    pop eax
    mov [0x1e],al                      ;显示句点 
loop:
    jmp loop
    
gdt:
    dw 31
    dd 0
    times 8 db 0
    dd 0x7c0001ff,0x00409800
    dd 0x8000ffff,0x0040920b
    dd 0x00007a00,0x00409600
    times 510-($-$$) db 0
    db 0x55,0xaa

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网页题目:操作系统开启分段并进入保护模式-创新互联
浏览路径:http://myzitong.com/article/degscs.html