windows内核探索--打印windows的GDT表(全局描述符表)
x86
#include <windows.h>
#include<stdio.h>
#include "x86struct.h"
void PrintSegmentDescriptor(ULONG64* sd, WORD Count);
SegmentSelector GetSegmentSelector(USHORT Selector);
int main()
{printf("0环cs段寄存器 ");GetSegmentSelector(8);//0环cs printf("0环ss段寄存器 ");GetSegmentSelector(0x10);//0环ssprintf("3环cs段寄存器 ");GetSegmentSelector(0x1b);//3环csprintf("3环ss段寄存器 ");GetSegmentSelector(0x23);//3环ssprintf(" ds段寄存器 ");GetSegmentSelector(0x23);//3环 0环都一样printf(" es段寄存器 ");GetSegmentSelector(0x23);//3环 0环都一样printf(" \n ");ULONG64 sd[] ={0x0000000000000000 ,0x00cf9b000000ffff,0x00cf93000000ffff,0x00cffb000000ffff,0x00cff3000000ffff,0x80008bb98c0020ab,0x804093b9b0004fff,0x0040f30000000fff,0x0000f2000400ffff,0x0000000000000000,0x800089b9ad200067,0x800089b9acb00067,0x0000000000000000,0x0000000000000000,0x800092b9880003ff,0x0000000000000000,0x0000000000000000,0x0000000000000000,0x0000000000000000,0x0000000000000000,0x800089b9ad900067,0x0000000000000000};PrintSegmentDescriptor(sd,_countof(sd));
}//拆解段选择子
SegmentSelector GetSegmentSelector(USHORT Selector)
{SegmentSelector sec = { 0 };sec.value = Selector;// 通过 structSelector 直接访问匿名结构体中的位域字段printf("RPL = %d ", sec.RPL);printf("TI = 0x%x ", sec.TI);printf("Index =0x%x\n", sec.index);return sec;
};void PrintSegmentDescriptor(ULONG64* sd ,WORD Count)
{SegmentDescriptor32 sc;DWORD BaseAddress = 0;DWORD SegLimit = 0;SegmentSelector Ss = { 0 };for (size_t i = 0; i < Count; i++, sd++){sc.heightValue = *sd >> 32;sc.lowValue = (DWORD)(*sd);BaseAddress = (DWORD)sc.high.base_high << 24;BaseAddress |= (DWORD)sc.high.base_mid << 16;BaseAddress |= (DWORD)sc.low.base_low;SegLimit =(DWORD)sc.high.limit_high << 16;SegLimit |= (DWORD)sc.low.limit_low;Ss.index = i;Ss.TI = 0;printf("[%d] BaseAddress=0x%x limit=0x%x ",i, BaseAddress, SegLimit);printf("G:%d D/B:%d AVL:%d ", sc.high.g, sc.high.db, sc.high.avl);//判断p位是否存在if (sc.high.p == 0){printf("段描述符无效\n");continue;}//判断是不是 系统描述符if (sc.high.s == 0){printf("系统描述符\n");continue;}//判断是不是数据段描述符if (sc.high.type < 8){switch (sc.high.type){case 0:printf("只读 数据段\n"); break;case 1:printf("只读 已访问 数据段\n"); break;case 2:printf("可读 可写 数据段\n"); break;case 3:printf("可读 可写 已访问 数据段\n"); break;case 4: printf("只读 向下扩展 数据段\n"); break;case 5:printf("只读 向下扩展 已访问 数据段\n"); break;case 6:printf("可读/可写 向下扩展 数据段\n"); break;case 7:printf("可读/可写 向下扩展 已访问 数据段\n"); break;default:break;}}//代码段描述符else{switch (sc.high.type){case 8:printf("只可执行 代码段\n"); break;case 9:printf("只可执行 已访问 代码段\n"); break;case 10:printf("可执行 可读 代码段\n"); break;case 11:printf("可执行 可读 已访问 代码段\n"); break;case 12:printf("只可执行 一致 代码段\n"); break;case 13:printf("只可执行 一致 已访问 代码段n"); break;case 14:printf("可执行 可读 一致 代码段\n"); break;case 15:printf("可执行 可读 一致 已访问代码段\n"); break;default:break;}}}
}
#pragma once#ifndef qq1490900437
#define qq1490900437//段选择子
typedef union _SegmentSelector
{struct {unsigned short RPL : 2; // 请求特权级unsigned short TI : 1; // 表指示符 (0: GDT, 1: LDT)unsigned short index : 13; // 段描述符表的索引};unsigned short value; 作为完整的16位值访问}SegmentSelector, * pSegmentSelector;GDTR寄存器
typedef struct _DescriptorTableRegister32
{unsigned int baseAddress;unsigned short tableLimt;
}GDTR32, * pGDTR32;typedef struct _DescriptorTableRegister64
{unsigned __int64 baseAddress64;unsigned short tableLimt;
}GDTR64, * pGDTR64;//段描述符32位
typedef struct _SegmentDescriptor32
{// 低 4 字节union{struct{// 在这里定义低字节的具体字段unsigned short limit_low; // 段界限的低 16 位unsigned short base_low; // 基地址的低 16 位} low; // 用于分解访问unsigned long lowValue; // 作为完整的低 4 字节访问};// 高 4 字节union{struct{unsigned char base_mid; // 基地址的中间 8 位unsigned char type : 4; // 段类型unsigned char s : 1; // 系统段/用户段标志unsigned char dpl : 2; // 特权级别unsigned char p : 1; // 存在位unsigned char limit_high : 4; // 段界限的高 4 位unsigned char avl : 1; // 可用位unsigned char reserved : 1; // 保留位unsigned char db : 1; // 方向/大小位unsigned char g : 1; // 粒度位unsigned char base_high; // 基地址的高 8 位} high; // 用于分解访问unsigned long heightValue; // 作为完整的高 4 字节访问};} SegmentDescriptor32, * pSegmentDescriptor32;//段描述符64位
typedef struct _SegmentDescriptor64
{// 低 4 字节union{struct{// 在这里定义低字节的具体字段unsigned short limit_low; // 段界限的低 16 位unsigned short base_low; // 基地址的低 16 位} low; // 用于分解访问unsigned long lowValue; // 作为完整的低 4 字节访问};// 高 4 字节union{struct{unsigned char base_mid; // 基地址的中间 8 位unsigned char type : 4; // 段类型unsigned char s : 1; // 系统段/用户段标志unsigned char dpl : 2; // 特权级别unsigned char p : 1; // 存在位unsigned char limit_high : 4; // 段界限的高 4 位unsigned char avl : 1; // 可用位unsigned char L : 1; // 保留位unsigned char db : 1; // 方向/大小位unsigned char g : 1; // 粒度位unsigned char base_high; // 基地址的高 8 位} high; // 用于分解访问unsigned long heightValue; // 作为完整的高 4 字节访问};} SegmentDescriptor64, * pSegmentDescriptor64;#endif // qq1490900437

相关文章:
windows内核探索--打印windows的GDT表(全局描述符表)
x86 #include <windows.h> #include<stdio.h> #include "x86struct.h" void PrintSegmentDescriptor(ULONG64* sd, WORD Count); SegmentSelector GetSegmentSelector(USHORT Selector); int main() {printf("0环cs段寄存器 ");GetSegmentSel…...
【ChatGPT】让ChatGPT帮助进行头脑风暴与创意生成
让ChatGPT帮助进行头脑风暴与创意生成 在日常工作和生活中,创意和头脑风暴是解决问题、创新和推动项目的关键步骤。ChatGPT,作为一个强大的语言模型,不仅可以提供信息和答案,还可以成为强大的头脑风暴工具,帮助用户快…...
大数据处理随堂测试
HDFS MapReduce HBase Spark...
2024最新pycharm安装教程及基本使用(超详细,新手小白必看)
文章目录 前言一、官网下载二、安装步骤三、使用示范四、番外篇(汉)大纲 PythonPyCharm安装包领取方式戳‘这块里’ 前言 一、官网下载 1. 进入pycharm官网,点击下载 PyCharm: The Python IDE for data science and web development by J…...
三国杀钓鱼自动化
三国杀钓鱼脚本 前言 本来是想做必杀的,但是后来测试了大约400钓发现纯靠连点没有漏掉的鱼,所以必杀功能就舍弃了。 我pyinstaller打包后运行.exe居然黑屏了???可能是多进程报错处理没写好,反正还是用vsc…...
在pycharm中使用sqllite
在pycharm中使用sqllite sqllite 简介 SQLite 是一个开源的、轻量级的、关系型数据库管理系统(RDBMS),它设计用于嵌入到应用程序中,并且可以在无需外部服务器进程的情况下运行。SQLite 提供了完整的 SQL 语言支持,允…...
Linux——文件操作
前言 1)在Linux下面,一切皆文件,文件文件内容文件属性 2)在访问文件是,都得先将文件打开,修改文件的本质其实还是通过执行代码的形式修改。 3)文件是被进程打开的,一个进程可以打…...
数据结构 ——— 数组栈oj题:有效括号
目录 题目要求 代码实现 题目要求 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每…...
Character AI被起诉!14岁青少年自杀,AI陪伴何去何从
终于,AI在青少年心理问题方面,被推上了风口浪尖。 最近,美国佛罗里达州,一名14岁男孩Sewell Setzer的父母控告Character AI公司,声称孩子沉迷该公司的AI聊天机器人,最后走上了自杀的道路。 跟AI聊天还能致…...
CSS3 动画相关属性实例大全(三)(columns、filter、flex、flex-basis 、flex-grow、flex-shrink属性)
CSS3 动画相关属性实例大全(三) (columns、filter、flex、flex-basis 、flex-grow、flex-shrink属性) 本文目录: 一、columns属性(设置元素的列宽和列数) 二、filter属性(调整图像、背景和边…...
中国最厉害的思想家改名大师颜廷利:以诚信为基,塑企业信誉
跨文化融合,共筑包容性文化殿堂。尊重差异,促进团队合作,以诚信为基,塑企业信誉。融合《升命学说》智慧,推动员工多元化,践行社会责任,树立良好形象。创新不息,持续学习,…...
Python 代码实现用于进行水质模拟和优化加氯量
# -*- coding:utf-8 -*- import epamodule as em import epanetmsxmodule as msx import pandas as pd import numpy as np# 水质模拟,会产生一个rpt文件,但并不是返回这个文件。 def quality_simulation(inp_file,rpt_file,msx_file...
挖矿病毒来势汹汹
病毒来了, 我的个人站点使用了 wordpress, 它的不知哪个漏洞让黑客攻入了我的站点 使用 top 命令看到了有不明进程始终占据了 100% 的 CPU snapshot 1 snapshot 2 通过以下 "三板斧"可以查杀这个进程 先用 top (shiftp) 查找占据 CPU 最多的进程根据其进程号 pid 查看…...
国产数据库的蓝海在哪?
昨天有幸参加了 OceanBase2024年度发布会。在过去的几年中,OB 作为国内自主研发的分布式数据库,取得了令人瞩目的成就,特别是在金融行业,OB 通过不断的技术革新和优化,已经成为行业的领导者之一。OceanBase 展现了强大…...
MySQL~表的操作(创建表,查看表,修改表,删除表)
1.创建表 1.1.创建表 首先要选择需要操作的数据库,USE 数据库名,后续可以根据实际情况操作时添加。 USE fruitsales;建表语法: create table 表名( 字段名1 数据类型, 字段名2 数据类型, ); 实例:创建fruit_bak1表。 create t…...
多线程加锁与手搓智能指针实践
前缀知识 如何手搓智能指针 参考链接 如何多线程加锁,线程间通信 参考链接 注意: 在第一个链接中,重载赋值构造函数时,返回值类型为引用类型,仅适用于返回的这个对象, 在该函数调用前 (已经)存在了!!! 具体可参考 参考…...
3180. 执行操作可获得的最大总奖励 I
力扣刷题记录 dp 回溯 3180. 执行操作可获得的最大总奖励 I 思路 和往常一样,先使用暴力求解,想到了回溯算法,选择了当前数字,就跳到下一个数字,形成一个树形结构来遍历所有结果集合,但是没有找到优化算…...
react18中的jsx 底层渲染机制相关原理
jsx 底层渲染机制 渲染 jsx 时,会先解析 jsx,生成一个虚拟 dom(virtual dom)。然后将虚拟 dom 渲染成真实 dom。如果 jsx 中包含事件,会将事件绑定到真实 dom 上。 虚拟 dom 对象,是框架内部构建的一套对象体系,对象…...
Spring Boot 实现文件上传下载功能
文章目录 一、原理分析1.1 请求类型1.2 服务器解析 二、功能实现2.1 创建项目并导入依赖2.2 文件上传功能实现2.2.1 文件上传 Service2.2.2 文件上传 Controller 2.3 文件下载功能实现2.3.1 文件下载 Service2.3.2 文件下载 Controller 2.4 文件上传前端代码(可选)2.4.1 上传文…...
ArcGIS 10.8 安装教程(含安装包)
目录 一、ArcGIS10.8二、安装链接三、安装教程四、ArcGIS实战 (一)ArcGIS10.8 1. 概述 ArcGIS 10.8是由美国Esri公司开发的GIS平台,用于处理、分析、显示和管理地理数据,并实现数据共享。它具有新特性和功能,性能更…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...
【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析
1. 元器件定义与技术特点 TPS54618CQRTERQ1 是德州仪器(TI)推出的一款 汽车级同步降压转换器(DC-DC开关稳压器),属于高性能电源管理芯片。核心特性包括: 输入电压范围:2.95V–6V,输…...
工厂方法模式和抽象工厂方法模式的battle
1.案例直接上手 在这个案例里面,我们会实现这个普通的工厂方法,并且对比这个普通工厂方法和我们直接创建对象的差别在哪里,为什么需要一个工厂: 下面的这个是我们的这个案例里面涉及到的接口和对应的实现类: 两个发…...
C#最佳实践:为何优先使用as或is而非强制转换
C#最佳实践:为何优先使用as或is而非强制转换 在 C# 的编程世界里,类型转换是我们经常会遇到的操作。就像在现实生活中,我们可能需要把不同形状的物品重新整理归类一样,在代码里,我们也常常需要将一个数据类型转换为另…...
【靶场】XXE-Lab xxe漏洞
前言 学习xxe漏洞,搭了个XXE-Lab的靶场 一、搭建靶场 现在需要登录,不知道用户名密码,先随便试试抓包 二、判断是否存在xxe漏洞 1.首先登录抓包 看到xml数据解析,由此判断和xxe漏洞有关,但还不确定xxe漏洞是否存在。 2.尝试xxe 漏洞 判断是否存在xxe漏洞 A.send to …...
