任务段&任务门

任务段(TSS)

概念:

TSS 全称task state segment,是指在操作系统进程管理的过程中,任务(进程)切换时的任务现场信息。

作用:

TSS在任务切换起重要作用,主要通过TSS实现任务的挂起和恢复,任务切换是指当前程序执行另一程序。在任务切换的时候,处理器中的各个寄存器的值自动保存到TR任务寄存器中指定的TSS中,然后下一个任务的TSS选择子被装在到TR中,然后将TR指向的TSS中取出各个寄存器的值放入处理器的各个寄存器中。(由于TSS中存在cs和ss所以可用于提权)
TSS在内存中是一块大小为104个字节,存储着各个寄存器的值
在这里插入图片描述
描述符
在这里插入图片描述

TYPE:9(未被加载)B(加载后)
Previous Task Link:上一个任务链切换tss时,会把上一个tss保存在这里ESP0\ESP1\ESP2:分别代表R0\R1\R2

操作TR寄存器

LTR指令:把tss装在tr寄存器;STR,读取tr寄存器,只读取16位,段选择子)tss是一块内存,最小104个字节,里面的值是实模式进保护模式时候预填充的tr寄存器 12位,指向tss(一个段选择子)

任务门

在这里插入图片描述

任务段没有base,通过任务段找到TSS

TSS切换实验:

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
char trs[6]={0};
char gdts[6]={0};



void __declspec(naked)  test()
{
    __asm
    {
            //jmp fword ptr trs;
            iretd;
    }
}

int main(int argc,char * argv[])
{

    char stack[100]={0};
    DWORD cr3=0;
    printf("cr3:");
    scanf("%X",&cr3);

    DWORD tss[0x68]={
            0x0,
            0x0,
            0x0,
            0x0,
            0x0,
            0x0,
            0x0,
            cr3,
            (DWORD)test,
            0,
            0,
            0,
            0,
            0,
            ((DWORD)stack) - 100,
            0,
            0,
            0,
            0x23,
            0x08,
            0x10,
            0x23,
            0x30,
            0,
            0,
            0x20ac0000

    };

    WORD rs=0;
    _asm
    {
            sgdt gdts;
            str ax;
            mov rs,ax;
    }
    *(WORD*)&trs[4]=rs;
    char buf[6]={0,0,0,0,0x48,0};
    __asm
    {
            call fword ptr buf;
    }

    printf("zsaddfsafdsa\n");
    return 0;
}

JMP FAR和CALL FAR访问任务段的区别
通过call(不能用jmp原因是只有call会把eflags NT置1,NT位会对iret指令产生影响 NT位如果为0,iret的值从堆栈中取(中断返回);如果NT位为1,会找TSS中的Previous Task Link进行返回)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值