当前位置: 首页 > news >正文

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帮助进行头脑风暴与创意生成 在日常工作和生活中&#xff0c;创意和头脑风暴是解决问题、创新和推动项目的关键步骤。ChatGPT&#xff0c;作为一个强大的语言模型&#xff0c;不仅可以提供信息和答案&#xff0c;还可以成为强大的头脑风暴工具&#xff0c;帮助用户快…...

大数据处理随堂测试

HDFS MapReduce HBase Spark...

2024最新pycharm安装教程及基本使用(超详细,新手小白必看)

文章目录 前言一、官网下载二、安装步骤三、使用示范四、番外篇&#xff08;汉&#xff09;大纲 PythonPyCharm安装包领取方式戳‘这块里’ 前言 一、官网下载 1. 进入pycharm官网&#xff0c;点击下载 PyCharm: The Python IDE for data science and web development by J…...

三国杀钓鱼自动化

三国杀钓鱼脚本 前言 本来是想做必杀的&#xff0c;但是后来测试了大约400钓发现纯靠连点没有漏掉的鱼&#xff0c;所以必杀功能就舍弃了。 我pyinstaller打包后运行.exe居然黑屏了&#xff1f;&#xff1f;&#xff1f;可能是多进程报错处理没写好&#xff0c;反正还是用vsc…...

在pycharm中使用sqllite

在pycharm中使用sqllite sqllite 简介 SQLite 是一个开源的、轻量级的、关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它设计用于嵌入到应用程序中&#xff0c;并且可以在无需外部服务器进程的情况下运行。SQLite 提供了完整的 SQL 语言支持&#xff0c;允…...

Linux——文件操作

前言 1&#xff09;在Linux下面&#xff0c;一切皆文件&#xff0c;文件文件内容文件属性 2&#xff09;在访问文件是&#xff0c;都得先将文件打开&#xff0c;修改文件的本质其实还是通过执行代码的形式修改。 3&#xff09;文件是被进程打开的&#xff0c;一个进程可以打…...

数据结构 ——— 数组栈oj题:有效括号

目录 题目要求 代码实现 题目要求 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每…...

Character AI被起诉!14岁青少年自杀,AI陪伴何去何从

终于&#xff0c;AI在青少年心理问题方面&#xff0c;被推上了风口浪尖。 最近&#xff0c;美国佛罗里达州&#xff0c;一名14岁男孩Sewell Setzer的父母控告Character AI公司&#xff0c;声称孩子沉迷该公司的AI聊天机器人&#xff0c;最后走上了自杀的道路。 跟AI聊天还能致…...

CSS3 动画相关属性实例大全(三)(columns、filter、flex、flex-basis 、flex-grow、flex-shrink属性)

CSS3 动画相关属性实例大全&#xff08;三) &#xff08;columns、filter、flex、flex-basis 、flex-grow、flex-shrink属性&#xff09; 本文目录&#xff1a; 一、columns属性&#xff08;设置元素的列宽和列数&#xff09; 二、filter属性&#xff08;调整图像、背景和边…...

中国最厉害的思想家改名大师颜廷利:以诚信为基,塑企业信誉

跨文化融合&#xff0c;共筑包容性文化殿堂。尊重差异&#xff0c;促进团队合作&#xff0c;以诚信为基&#xff0c;塑企业信誉。融合《升命学说》智慧&#xff0c;推动员工多元化&#xff0c;践行社会责任&#xff0c;树立良好形象。创新不息&#xff0c;持续学习&#xff0c;…...

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年度发布会。在过去的几年中&#xff0c;OB 作为国内自主研发的分布式数据库&#xff0c;取得了令人瞩目的成就&#xff0c;特别是在金融行业&#xff0c;OB 通过不断的技术革新和优化&#xff0c;已经成为行业的领导者之一。OceanBase 展现了强大…...

MySQL~表的操作(创建表,查看表,修改表,删除表)

1.创建表 1.1.创建表 首先要选择需要操作的数据库&#xff0c;USE 数据库名&#xff0c;后续可以根据实际情况操作时添加。 USE fruitsales;建表语法&#xff1a; create table 表名( 字段名1 数据类型, 字段名2 数据类型, ); 实例&#xff1a;创建fruit_bak1表。 create t…...

多线程加锁与手搓智能指针实践

前缀知识 如何手搓智能指针 参考链接 如何多线程加锁&#xff0c;线程间通信 参考链接 注意&#xff1a; 在第一个链接中&#xff0c;重载赋值构造函数时&#xff0c;返回值类型为引用类型&#xff0c;仅适用于返回的这个对象, 在该函数调用前 (已经)存在了!!! 具体可参考 参考…...

3180. 执行操作可获得的最大总奖励 I

力扣刷题记录 dp 回溯 3180. 执行操作可获得的最大总奖励 I 思路 和往常一样&#xff0c;先使用暴力求解&#xff0c;想到了回溯算法&#xff0c;选择了当前数字&#xff0c;就跳到下一个数字&#xff0c;形成一个树形结构来遍历所有结果集合&#xff0c;但是没有找到优化算…...

react18中的jsx 底层渲染机制相关原理

jsx 底层渲染机制 渲染 jsx 时&#xff0c;会先解析 jsx&#xff0c;生成一个虚拟 dom(virtual dom)。然后将虚拟 dom 渲染成真实 dom。如果 jsx 中包含事件&#xff0c;会将事件绑定到真实 dom 上。 虚拟 dom 对象&#xff0c;是框架内部构建的一套对象体系&#xff0c;对象…...

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实战 &#xff08;一&#xff09;ArcGIS10.8 1. 概述 ArcGIS 10.8是由美国Esri公司开发的GIS平台&#xff0c;用于处理、分析、显示和管理地理数据&#xff0c;并实现数据共享。它具有新特性和功能&#xff0c;性能更…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...