【2021.03.24】任务门

要点回顾

前文中讲解了如何通过CALL、JMP指令访问任务段。

本文主要介绍如何通过任务门访问任务段。

既然已经可以通过JMP、CALL访问任务段了,那么为什么还要有任务门呢?

IDT(中断描述符表)

IDT表可以包含3种门描述符:

  1. 任务门描述符。
  2. 中断门描述符。
  3. 陷阱门描述符。

任务门描述符

注意:

TYPE位现在应该是5(任务门)。前文提过,当为9或B的时候代表什么。

低4字节16-31位存储的是一个TSS段的描述符选择子。既不是地址也不是偏移,而是TSS段的描述符。

任务门麻烦在于跨表,任务门本身在IDT表中,而低4字节16-31位又指定了一个TSS段描述符,TSS段描述符在GDT表中。

任务门执行过程

INT N-->查IDT表,找到中断门描述符-->通过中断门描述符查询GDT表,找到任务段描述符-->使用TSS段中的值修改寄存器-->IRETD返回

需要注意:INT指令,后面的N表示索引。

实验注意事项

至少构造两个描述符:

  1. 任务门描述符:构造出来以后写入IDT表中。
  2. TSS段描述符:构造出来以后写入GDT表中。

代码

#include "stdafx.h"
#include <windows.h>
 
DWORD dwOK;
DWORD dwESP;
DWORD dwCS;
 
__declspec(naked)func()    //函数地址:0x00401020
{
    dwOK = 1;
 
    __asm
    {
        mov eax,esp
        mov dwESP,eax
        mov ax,cs
        mov word ptr [dwCS],ax

        iretd
    }        
}

//eq 8003f500 0000e500`00c30000    IDT表任务门描述符
//eq 8003f0c0 0000e912`fdcc0068    TSS任务段描述符
int main(int argc, char* argv[])
{
    char bu[0x10];        //0x12ff70
    int iCr3;
 
    printf("input CR3:\n");
    scanf("%x",&iCr3);    //通过windbg工具指令:!process 0 0 获取
 
    DWORD iTss[0x68] = 
    {
        0x00000000,    //link    当一次性切换一堆寄存器的时候,该地方存储的就是原104个字节的段选择子,该值不需要填充,当发生切换时由CPU自动完成
 
        //因为并不是中断门或调用门,故esp0、ss0,esp1、ss1,esp2、ss2可以填0
        0x00000000,    //esp0    (DWORD)bu    想进0环取esp0和ss0
        0x00000000,    //ss0
        0x00000000,    //esp1    想进1环取esp1和ss1    Windows并未使用1环,自己使用时可以相进就近
        0x00000000,    //ss1
        0x00000000,    //esp2    想进2环取esp2和ss2    Windows并未使用2环,自己使用时可以相进就近
        0x00000000,    //ss2
 
        (DWORD)iCr3,   //cr3    目前只需要知道它是个寄存器即可, 必须填写
        0x00401020,    //eip    下一次执行的代码位置, 必须填写
 
        0x00000000,    //eflags
        0x00000000,    //eax
        0x00000000,    //ecx
        0x00000000,    //edx
        0x00000000,    //ebx
 
        (DWORD)bu,     //esp    代码执行切换的时候, 一旦发生切换所有寄存器都会发生变化, EIP变了那么ESP也会发生变化, 上面定义的数组当成堆栈来用
 
        0x00000000,    //ebp
        0x00000000,    //esi
        0x00000000,    //edi
 
        0x00000023,    //es    无论3环还是0环都是23
        0x00000008,    //cs    0x0000001B    3环1B, 0环08
        0x00000010,    //ss    0x00000023    3环23, 0环10
        0x00000023,    //ds    无论3环还是0环都是23
        0x00000030,    //fs    0x0000003B    3环3B, 0环30
        0x00000000,    //gs    永远是0, window并未使用
        0x00000000,    //ldt
        0x20ac0000     //IO权限位图, Windows2000以后并未使用, 但结构中仍然存在
    };

    __asm
    {
        int 0x20
    }
 
    printf("ok = %d, ESP = %x, CS = %x\n", dwOK, dwESP, dwCS);
 
    return 0;
}

实验

1.找到CR3并输入至程序中

可以看到代码中断了。

思考

  1. 既然已经可以通过JMP、CALL访问任务段了,那么为什么还要有任务门呢?
  2. CPU提供TSS它的目的是希望我们在任务切换的时候,通过硬件级别的方式来切换,但是操作系统并没有使用,无论是Windows还是Linux都没有使用硬件提供的这种方式来进行线程切换,那么它什么时候使用了呢?
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: PyCharm 2021.03是一款功能强大的集成开发环境,专用于编写Python代码。它提供了许多方便的功能,使得编写、调试和管理Python项目变得更加容易和高效。 首先,PyCharm 2021.03有一个直观且用户友好的界面,使得新手很容易上手使用。您可以根据需要自定义界面布局,并根据喜好选择不同的主题。此外,它还支持多个操作系统,例如Windows、Mac和Linux,使得用户可以在自己熟悉的操作系统上进行开发。 其次,PyCharm 2021.03提供了强大的代码编辑功能。它具有智能代码完成、语法高亮和自动缩进等功能,可以帮助您更快地编写代码,减少出错的可能性。还有代码导航和自动补全功能,让您在编写代码时更加高效。 此外,PyCharm 2021.03还提供了调试工具,方便您在调试时查看变量的值和程序的执行流程。您可以设置断点,逐行调试代码,并通过调试控制台查看程序的输出结果。 除了基本的开发功能外,PyCharm 2021.03还提供了许多高级功能,如代码检查、重构和版本控制。它可以帮助您检查代码中的错误和潜在问题,并提供建议的修复方法。还可以通过重构功能进行代码重构,提高代码的可读性和可维护性。此外,它还集成了版本控制系统,如Git,方便您管理和协作开发项目。 总结来说,PyCharm 2021.03是一款功能丰富、易于使用的Python集成开发环境。它提供了强大的代码编辑、调试和管理工具,大大提高了Python编程的效率和质量。无论您是初学者还是有经验的开发者,PyCharm 2021.03都是一个值得尝试的工具。 ### 回答2: PyCharm是一款功能强大的Python集成开发环境(IDE),它为Python开发者提供了丰富的功能和工具,使得编写、调试和部署Python代码变得更加高效和便捷。 PyCharm 2021.03是PyCharm系列的最新版本,它在之前版本的基础上做出了许多改进和更新。首先,它提供了全面的代码编辑功能,包括语法高亮、自动补全、代码重构等。这些功能可以帮助开发者提高编写代码的效率,减少书写错误。 其次,PyCharm 2021.03还提供了强大的调试工具,能够帮助开发者快速定位代码中的错误。通过设置断点,可以逐步执行代码,并查看变量的值、调用栈等信息。这些功能对于解决代码中的bug非常有帮助。 另外,PyCharm 2021.03还支持集成版本控制系统,如Git,方便开发者管理和协作代码。它还集成了测试工具,可以进行单元测试和集成测试,确保代码的质量和稳定性。 此外,PyCharm 2021.03还具备大量的插件和扩展,可以满足各种不同的开发需求。例如,可以安装Django插件来支持Django框架的开发,或者安装科学计算扩展来进行数据分析和机器学习等工作。 总之,PyCharm 2021.03是一款功能强大且易于使用的Python开发工具,它提供了全面的功能和工具,帮助开发者更高效地开发Python应用程序。无论是初学者还是经验丰富的开发者,都可以从中受益,并提升自己的开发效率和代码质量。 ### 回答3: PyCharm2021.03 是一款功能强大的集成开发环境(IDE),特别针对Python开发者而设计。它提供了丰富的功能和工具,使得编写、调试和管理Python代码变得更加高效和便捷。 首先,PyCharm2021.03具有直观的用户界面,使得新手能够快速上手。它提供了智能的代码补全功能,能够实时推荐代码片段和方法,帮助我们节省时间和减少错误。同时,它还支持自动重构代码,可以方便地修改代码结构和命名,提高代码可读性。 其次,PyCharm2021.03还提供了强大的调试功能。我们可以在代码中设置断点,逐步执行代码,并查看变量的值和程序状态,以便更好地理解和调试代码。此外,它还支持远程调试,可以通过与远程服务器的连接来调试远程代码。 此外,PyCharm2021.03还集成了版本控制系统,如Git,方便团队协作和代码管理。我们可以轻松地进行代码提交、拉取和解决冲突,实现版本管理和代码回滚等操作。 PyCharm2021.03还支持众多Python框架和库,如Django、Flask等,使得开发网站、Web应用和数据分析等项目变得更加简单和高效。 总之,PyCharm2021.03是一款功能强大、易用的Python开发工具。通过它,我们可以更加高效地开发和管理Python代码,提高开发效率和质量。无论是初学者还是有经验的开发者,都可以通过PyCharm2021.03获得更好的开发体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值