14.[保护模式]TSS任务段

1.TSS的结构:

  TSS不是寄存器,它是一个内存;(包含所有寄存器的值)

 2.TSS的作用:

如果切换一个线程那么一定需要切换寄存器;

 3.CPU怎么找到TSS内存块呢? 通过TaskRegister段寄存器 

  

TaskRegister段寄存器 的值是CPU启动的时候通过GDT表中 TSS Descrptor (段描述符)加载出来的;

4.TSS Descriptor (TSS段描述符)

如果Type 为 1001  (9)的时候说明这个段描述符没有加载到TR寄存器中

如果Type 为 1011  (B)的时候说明这个段描述符加载到TR寄存器中

5.TR寄存器的读写:
  

6.修改TR寄存器:

          

 测试实验:

7.实验思路

  • 编写测试入口函数
  • 构造TSS
  • 设计TSS段描述符并安装

构造TSS:

  

char st[10] = {0}; 
TSS tss = {// tss的地址根据执行代码自己组合
    0x00000000,//link
    (DWORD)st,//esp0
    0x00000010,//ss0
    0x00000000,//esp1
    0x00000000,//ss1
    0x00000000,//esp2
    0x00000000,//ss2
    0x00000000,//cr3
    0x0040fad0,//eip   必填项,不然执行完后cpu不知道回来从哪开始执行
    0x00000000,//eflags
    0x00000000,//eax
    0x00000000,//ecx
    0x00000000,//edx
    0x00000000,//ebx
    (DWORD)st,//esp
    0x00000000,//ebp
    0x00000000,//esi
    0x00000000,//edi
    0x00000023,//es  
    0x00000008,//cs  
    0x00000010,//ss
    0x00000023,//ds
    0x00000030,//fs
    0x00000000,//gs
    0x00000000,//ldt
    0x20ac0000
};

猜你喜欢

转载自www.cnblogs.com/hanhandaren/p/11206460.html