Windows系统调用中的现场保存

Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html

Windows系统调用中的现场保存

  我们之前介绍过三环进零环的步骤,通过中断或者快速调用来实现。

  但是我们是否考虑过CPU从三环进入零环时,其三环的寄存器该如何保存。

  这一篇文件就来介绍其系统调用中的(三环)现场保存的问题。

一、几个重要的结构体介绍

1. _Ktrap_frame

  该结构体简单来说用于三环的寄存器保存,存储于零环,由操作系统维护

  详细信息可以查看这篇文章:解析windows内核每日一讲 陷阱调度

  我们之前讲过进入0环时获取新的四个寄存器非常重要, SS\CS\EIP\ESP

  如下图,当进入零环时,操作系统会获取ESP值,该值指向_Ktrap_frame结构体,将旧的SS\CS\EIP\ESP\EFLAG依次压入(0x78-0x68处),之后ESP +0x070 ErrCode处。

  之后便进入获取的EIP来执行内核函数。

  

2. _ETHREAD 结构体

  该结构体保存了和线程相关的信息,位于0环(其并非三环的 TEB,线程环境块)

  在_ETHREAD结构体第一个成员是 _KTHRAD,可以看出其大小0x200,里面保存了线程中的一些信息  

  kd > dt _ethread
            ntdll!_ETHREAD
            + 0x000 Tcb              : _KTHREAD
            + 0x200 CreateTime : _LARGE_INTEGER
          ····

kd > dt _kthread
            ntdll!_KTHREAD
            + 0x000 Header           : _DISPATCHER_HEADER
            + 0x010 CycleTime : Uint8B
            + 0x018 HighCycleTime : Uint4B
            + 0x020 QuantumTarget : Uint8B
            + 0x028 InitialStack : Ptr32 Void
            + 0x02c StackLimit : Ptr32 Void
            + 0x030 KernelStack : Ptr32 Void
            + 0x034 ThreadLock : Uint4B
            + 0x038 WaitRegister : _KWAIT_STATUS_REGISTER
            + 0x039 Running : UChar

3. KPCR结构体(kernel processor control region 内核线程控制区)

  有一篇文章,里面大体介绍了该结构体 --> [Windows内核分析]KPCR结构体介绍 (CPU控制区 Processor Control Region)

  简单来说,KPCR结构体中保存着 关于CPU 的信息,一个核有一个自己私有的KPCR结构体,八核则每个核有自己的单独的KPCR结构体

  我们需要用到最后一个成员中的中的CurrentThread来获取当前线程的_KTHREAD结构体。

   kd > dt _kpcr
            ntdll!_KPCR
            + 0x000 NtTib            : _NT_TIB
            + 0x000 Used_ExceptionList : Ptr32 _EXCEPTION_REGISTRATION_RECORD
            ····
            +0x120 PrcbData         : _KPRCB

kd > dt _KPRCB
            ntdll!_KPRCB
            + 0x000 MinorVersion     : Uint2B
            + 0x002 MajorVersion : Uint2B
            + 0x004 CurrentThread : Ptr32 _KTHREAD
            + 0x008 NextThread : Ptr32 _KTHREAD
            ···

   

  

  

原文地址:https://www.cnblogs.com/onetrainee/p/11707130.html

时间: 2024-08-29 09:29:11

Windows系统调用中的现场保存的相关文章

Windows系统调用中API的3环部分(依据分析重写ReadProcessMemory函数)

Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html Windows系统调用中API的3环部分 一.R3环API分析的重要性 Windows所提供给R3环的API,实质就是对操作系统接口的封装,其实现部分都是在R0实现的. 很多恶意程序会利用钩子来钩取这些API,从而达到截取内容,修改数据的意图. 现在我们使用olldbg对ReadProcessMemory进行跟踪分析,查看其在R3的实现,并根据我们的分析来重写一个

Windows系统调用中API从3环到0环(下)

 Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html Windows系统调用中API从3环到0环(下) 如果对API在三环的部分不了解的,可以查看 Windows系统调用中的API三环部分(依据分析重写ReadProcessMemory函数 上篇:Windows系统调用中API从3环到0环(上) 这篇文章分为上下两篇,其中上篇初步讲解大体轮廓,下篇着重通过实验来探究其内部实现,最终分析两个函数(快速调用与系统中断)

Windows系统调用中的系统服务表

Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html Windows系统调用中的系统服务表 如果这部分不理解,可以查看 Windows内核分析索引目录依次阅读. 我们在之前讲过系统调用过程中,给予eax一个编号,操作系统通过这个编号来执行某个内核函数. 这个函数是通过操作系统的系统服务表来查找的. 现在,我们来探究一下nt!KiFastCallEntry的反汇编代码,看看其如何查看系统服务表找到要执行的函数的. 一.

Windows系统调用中的系统服务表描述符

 Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html Windows系统调用中的系统服务表描述符 在前面,我们将解过 系统服务表.可是,我们有个疑问,系统服务表存储在哪里呢? 答案就是:系统服务表 存储在 系统服务描述符表中.(其又称为 SSDT Service Descriptor Table)  一.使用PELord函数从ntoskrnl.exe文件中查看SSDT导出函数 如图,可以看出KeServiceDes

[转载]Windows系统调用架构分析—也谈KiFastCallEntry函数地址的获取

原文地址:点击打开链接 为什么要写这篇文章 1.      因为最近在学习<软件调试>这本书,看到书中的某个调试历程中讲了Windows的系统调用的实现机制,其中讲到了从Ring3跳转到Ring0之后直接进入了KiFastCallEntry这个函数. 2.      碰巧前天又在网上看到了一篇老文章介绍xxx安全卫士对Windows系统调用的Hook,主要就是Hook到这个函数 3.      刚刚做完毕业设计,对使用中断来实现系统调用的方式记忆犹新. 以上原因导致我最近眼前总是出现系统调用这

将CnetOS 6.5加入Windows域中

我相信,很多公司都有统一身份认证的需求,只是这个统一认证很多公司都没有彻底完成,比如我见到的很多企业都使用Windows AD来管理办公电脑,笔记本等运行windows操作系统的计算机,而IDC机房大多是Linux系统的服务器,这些都采用ldap(如openldap)来做身份认证,但是Windows AD和ldap基本上就没有什么关系了.问过一两个企业的系统管理员,也基本清楚,主要是服务器的数量就那么多,而且大部分用户是不需要登录服务器的,所以只有运维人员才需要进行服务器管理,所以使用ldap统

MongoDB学习(1)—在Windows系统中安装MongoDB

概述 本文主要介绍在Windows系统安装MongoDB的方法. MongoDB官方网址:http://www.mongodb.org/,最新版本为2.6.7. 注意: 从2.2版本开始,MongoDB并不支持Windows XP.请使用最新版本的windows来使用最新版本的MongoDB. 如果您正在运行任何版本的Windows Server 2008 R2或Windows 7,请安装热修复补丁来解决一个在Windows上使用内存映射文件问题. 补丁下载地址:官方 360云盘(访问密码:5e

点滴记录——Windows 7中安装Sublime Text 3、cynwin、SublimeClang

转载请说明出处:http://blog.csdn.net/cywosp/article/details/34429697 1. 到https://www.cygwin.com/下载setup-x86_64.exe安装文件,下载后采用默认路劲安装,在选库的时候,选择相应的gcc g++ 2.到http://www.sublimetext.com/3下载Windows 64 bit的安装包,下载后安装 3. 安装Package Control 安装好sublime text 3后打开,然后按快捷键"

Windows 10 中的文件历史记录

什么事文件历史记录? 文件历史记录是一个备份应用程序,它会持续保护存储在库.桌面.收藏夹和联系人文件夹中的个人文件.它定期扫描(默认情况下每小时一次)文件系统中的更改并将更改的文件复制到另一位置.每当您的任何个人文件发生更改时,其副本都将存储在您选择的专用外部存储设备上.随着时间的推移,文件历史记录将会建立对任何个人文件所做更改的完整历史记录. 注意:文件历史记录只保护用户库.桌面.收藏夹和联系人.其他文件(例如操作系统文件.应用程序和设置)将不会得到备份 那么怎么在Windows 10中使用文