首页 > 其他分享 >任务状态段:TSS

任务状态段:TSS

时间:2024-03-10 22:34:27浏览次数:33  
标签:状态 tr CPU 任务 切换 寄存器 DWORD TSS

1、任务状态段

  可以将任务状态段理解为一块内存,站在CPU设计的角度可以理解成每一个任务都拥有一个TSS结构,它占用104个字节。

  Intel白皮书给出的图:

  

 可以将该图理解为一个结构,它在内存中也是连续存储的。

typedef struct TSS {
    DWORD link; // 保存前一个 TSS 段选择子,使用 call 指令切换寄存器的时候由CPU填写。
     // 下面这些都是用来做切换寄存器值用的,切换寄存器的时候由CPU自动填写。
    DWORD esp0; // 保存 0 环栈指针
    DWORD ss0;  // 保存 0 环栈段选择子
    DWORD esp1; // 保存 1 环栈指针
    DWORD ss1;  // 保存 1 环栈段选择子
    DWORD esp2; // 保存 2 环栈指针
    DWORD ss2;  // 保存 2 环栈段选择子
    DWORD cr3;  //这里涉及到分页。
    DWORD eip; 
    DWORD eflags;
    DWORD eax;
    DWORD ecx;
    DWORD edx;
    DWORD ebx;
    DWORD esp;
    DWORD ebp;
    DWORD esi;
    DWORD edi;//8个通用寄存器是可以随便改动的
    DWORD es;
    DWORD cs;
    DWORD ss;
    DWORD ds;
    DWORD fs;
    DWORD gs;
    DWORD ldt; 
    DWORD io_map;//IO映射,没什么用,有需要的可以百度拓展一下
} TSS;

 

学习调用门、陷阱门后在发生提权的情况下,堆栈会做切换的动作,那么堆栈的ESP就是从TSS中获取的。

 

2、CPU如何定位TSS

CPU通过tr寄存器找到tss结构的

TR寄存器读写:

LTR:使用LTR装载的话,仅仅是改变TR寄存器中的值(96位),没有真正改变TSS。切三环是不可以使用LTR指令。

STR:如果使用STR去读TR寄存器,则只能读取选择子部分(16位)。

当S=0, TYPE=1001或者TYPE=1011的时候,表示这是一个TSS段描述符。当TSS段没被加载进 tr 寄存器时,TYPE=1001,一旦TSS被加载进 tr 寄存器,TYPE就变成了1011.

4. TSS的用途

  • 保存0环、1环和2环的栈段选择子和栈顶指针

前面讲到了,在跨段提权的时候,需要切换栈,CPU会通过 tr 寄存器找到 TSS,取出其中的 SS0 和 ESP0 复制到 ss 和 esp 寄存器中。这只是 TSS 的一个用途,也是现代 Windows 操作系统使用到的功能。

  • 一次性切换一堆寄存器

TSS 的另一个用途是什么?通过观察 TSS 的结构还发现 TSS 不仅存储了不同特权级下的 SS 和 ESP,还有 cs, esp, ss, esp 等等,这些后面不带数字的变量名,有着各自的用途。可以通过 call/jmp + TSS段选择子指令一次性把这些值加载到 CPU 对应的寄存器中。同时,旧值将保存在旧的 TSS 中。

GDT 表中可以存放多个TSS描述符,这意味着内存中可以存在多份不同的TSS。总有一个 TSS 是在当前使用中的,也就是 tr 寄存器指向的那个 TSS。当使用 call/jmp + TSS段选择子的时候,CPU做了以下几件事情。

  • 把当前所有寄存器(TSS结构中有的那些寄存器)的值填写到当前 tr 段寄存器指向的 TSS 中
  • 把新的 TSS 段选择子指向的段描述符加载到 tr 段寄存器中
  • 把新的 TSS 段中的值覆盖到当前所有寄存器(TSS结构中有的那些寄存器)中

总结

本节主要讲了 TSS 的两个功能:

  • 提权时栈切换用到了 TSS
  • 切换一堆寄存器

本文始终没有把 TSS 和任务切换关联起来,只是为了避免给初学者造成困扰。虽然 Intel 设计的初衷是用它来做任务切换,然而,在现代操作系统中(无论是 Windows 还是 Linux),都没有使用这种方式来执行任务切换,比如线程切换和进程切换。主要原因是这种切换速度非常慢,一条指令要消耗200多个时钟周期。

至于现代操作系统如何进行线程或进程的切换,确实是用到了 TSS,但却不是靠切换call/jmp TSS 来切换任务。

 

标签:状态,tr,CPU,任务,切换,寄存器,DWORD,TSS
From: https://www.cnblogs.com/zhongyongzixue/p/18065018

相关文章

  • Word2Vec+下游任务
    2024.3.10Word2Vec+下游任务word2vec也是一种神经网络语言模型---->主要目的就是为了得到词向量这类神经网络模型主要分为两个小类CBOW和Skip-gramCBOW主要作用:给出一个词的上下文,得到一个词Skip-gram主要作用:给出一个词,得到词的上下文NNLM和Word2Vec的区别NNLM-......
  • 神州笔记本(HASEE) win11 操作系统自动进入休眠状态,唤醒后自动关机
    前几日在某东上购入神州笔记本(HASEE),用着本来还好,但是最近只要用到电源模式的问题,这个笔记本就是会无端进入到自动关机的状态。前文中也讨论过类似的问题:神州笔记本win11节能模式供电不足自动关机不过这次又有了新的问题,那就是在操作系统的电源模式下设置”闲置进入睡眠“......
  • cnpack支持调试状态查看TDataSet对象
    在Debug状态下,cnpack支持查看TDataSet对象了!具体用法:在Debug状态下运行项目,如下图:把鼠标放到q对象上,q是一个基于TDataSet继承来的TkbmMWClientQuery对象,也就是他是一个TDataSet,这时候会弹出一个窗口,也就是一个hint。注意左上角的放大镜,下移鼠标,让鼠标进入hint区域,点击放大镜......
  • schedule 取消任务怎么实现
    点击查看代码importtimeimportthreadingimportscheduleschedule.every(10).seconds.do(job)#每隔10分钟运行一次job函数schedule.every(10).minutes.do(job)#每隔10分钟运行一次job函数schedule.every().hour.do(job)......
  • 基于工业边缘网关的机械状态监测与故障诊断应用
    机械设备工作于各种各样的环境,在运行过程中必然受到力、温度、摩擦等多种物理、化学作用,使机械设备状态和性能变化,进而产生“隐性故障”。随着机械设备“隐性故障”的长期累积,可能造成设备损伤损坏,甚至影响系统整体生产和运营,造成经济损失甚至威胁人身安全。  针对机械设......
  • Linux架构24 ansible之get_url模块, 服务管理模块, 用户管理模块, 定时任务模块, 挂载
    3.get_url模块-name:Downloadfoo.confget_url:url:http://example.com/path/file.confdest:/etc/foo.confmode:'0440'checksum:md5:b5bb9...#公司内部库,验证文件是否为要求的文件checksum:sha256:b5bb9...#另一种验证方式......
  • 匈牙利算法--任务分配
    https://blog.csdn.net/ljjjjjjjjjjj/article/details/123261360例如有3个任务ABC,要分配给甲乙丙三人分别去完成,每个人完成3个任务所耗费精力不同(因为每个人特长不同),此处也叫完成任务耗费的代价,合理分配任务,可以达到总效率最高的目标。此时若想达到耗费总精力最小,可以用穷举法......
  • Advanced .Net Debugging 3:基本调试任务(对象检查:内存、值类型、引用类型、数组和异常
    一、介绍这是我的《Advanced.NetDebugging》这个系列的第四篇文章。今天这篇文章的标题虽然叫做“基本调试任务”,但是这章的内容还是挺多的。由于内容太多,故原书的第三章内容我分两篇文章来写。上一篇我们了解了一些调试技巧,比如:单步调试、下断点、过程调试等,这篇文章主......
  • macOS的任务计划crontab
    使用crontab执行计划任务看了看多老大的讲解和视频仍然无法正常运行,在这里整理了一下crontab的用法和坑首先crontab是需要预先创建。第一步打开终端,执行sudotouch/etc/crontab如果不创建我们所编辑的crontab命令会保存到/tmp目录中,不知道什么时候就会消失,很多人问题出在这......
  • 大数据分析---关键词分类任务
    现在的任务需求是根据关键词(以逗号分割的一列)对类别分类。问题:1.样本数据不够多,并且关键词来源于之前的csv文件的某一列的提取,可能本身就不太准确。2.数据本身有空值等不合理的字段。3.数据准备阶段需要将将中文文本转化为encoding编码解决方案:经过查阅资料可以选择使用朴素......