TSS 任务状态段描述符


TSS 任务状态段描述符

​ TSS(Task State Segment)任务状态段描述符用于描述保存任务重要信息的系统段,权限发生变化要借用TSS。任务状态段寄存器TR的可见部分为当前任务状态段描述符的选择子,不可见部分是当前任务状态段的段基地址和段界限等信息,TR只装载一次,TR.Base指向的地址即TSS。

​ 操作系统通过TSS实现任务的挂起和恢复,在切换任务的过程中,处理器中的各寄存器的当前值会被自动地保存到TR指定的TSS中,接着下一个任务的TSS的选择子被装入TR,最后从TR所指定的TSS中取出各寄存器的值送到处理器的各寄存器中。

TSS基本格式

任务状态段基本格式

其中:

ESP0-ESP2对应0环-2环的ESP,由于SS跟ESP相对应,所以SS段也相同

CR3:每一个进程都有一个CR3,里面存的是页目录表基址,为物理地址

LDT:局部描述符表

链接字段:安排在TSS 0偏移处,其中高16位未使用,低16位保存前一任务的TSS选择子

​ TSS的地址映射寄存器位于0x1C(CR3)0x60(LDT)中,在任务切换时,处理器自动从TSS中取出这两个字段,分别装入到CR3和LDTR寄存器中,这样就改变了虚拟地址空间到物理地址空间的映射。但由于在任务切换时,处理器不会把换出任务方式的寄存器CR3和LDTR的内容保存到TSS中的地址映射寄存器区域,所以如果改变了LDTR或CR3,就必须把新值保存到TSS中的地址映射寄存器区域中。

WinDBG测试

windbg中 dd、dw、dq只能查看线性地址,查看物理地址需在dd前加上!

!process 0 -1 查看当前执行的进程

!process 0 0遍历进程,其中的DirBase就是CR3

进程列表

进程下WinDBG断点

使用前文的进入0环的方式,在进入0环后用硬编码下一个断点,系统就断到了WinDBG里面

_declspec(naked)void fun(){
    _asm {
        push ebp
        mov ebp,esp
        sub esp,0x44
        push ebx
        push esi
        push edi
    }

     _asm {
        mov ax,cs
        mov cx,ss
        mov w_cs,ax
        mov w_ss,cx
     }

    _asm{
        int 0x3 //断到windbg,查找当前进程CR3
        //windows设定 int 0x8 时出现蓝屏
    }

    _asm{
        pop edi
        pop esi
        pop ebx
        mov esp,ebp
        pop ebp
        iretd
    }
}

进程断到windbg中

输入u可以查看当前断点以下的汇编,也可以在汇编的窗口中查看。

输入!process 0 -1查看当前进程信息

当前进程信息

输入.process /i [PROCESS后面的ID]可以切换进程

切换回System进程

在切换到System进程后,输入g运行后可以打印详细信息

WinDBG查看TSS

由于TR的选择子是28,直接定位到GDT中0x28偏移的位置

GDT

按照描述符格式分割出TSS地址 80 008b 04`2000 20ab ==> 80042000

dd 80042000查看TSS内容,dt _KTSS 80042000查看结构

TSS内容

下面乱记的,不知道啥意思

中断门或陷阱门

当权限不变时

int

pushfd

push cs

push eip

当权限变化时

push ss

push esp

pushfd

push cs

push eip

调用门

权限不变

push cs

push eip

权限改变

push ss

push esp

push cs

push eip


文章作者: Kevin。
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Kevin。 !
评论
 上一篇
Windows分页 Windows分页
Windows分页Windows32主要有两种分页方式,10-10-12 和 2-9-9-12,加起来就是32位,其中2,9,10,12代表2的x次方 10-10-12分页 根据因特尔手册给出的图可以看出,当前程序的页目录索引存在CR3中,
2022-04-20
下一篇 
系统段描述符表IDTR 系统段描述符表IDTR
系统段描述符表IDTR中断门和陷阱门不同描述符表中的值代表不同类型的门,放在gdtr表里面的门叫做调用门,放在idtr表里面的门叫做中断门和陷阱门 中断门和陷阱门描述中断/异常处理程序的入口点。中断门和陷阱门内的选择子必须指向代码段描述符,
2022-04-14
  目录