游戏网站服务器租用网站正在建设中提示页面

news/2025/9/23 15:22:42/文章来源:
游戏网站服务器租用,网站正在建设中提示页面,天津网站制作维护,国内常见响应式网站By Lthis 上个月就想写了#xff0c;一直没时间...网上大概搜了一下#xff0c;原理与操作倒是一大堆#xff0c;一直没看到源码实现#xff0c;总得有人动手#xff0c;这回轮到我了。东西写得很烂#xff0c;请大牛勿喷。一直觉得靠源码的方式驱动学习是非常好的一种学…                                                                                                             By Lthis 上个月就想写了一直没时间...网上大概搜了一下原理与操作倒是一大堆一直没看到源码实现总得有人动手这回轮到我了。东西写得很烂请大牛勿喷。一直觉得靠源码的方式驱动学习是非常好的一种学习方法比较直观声明一下本教程只有讨论开启PAE与关闭PAE两种至于PSE是否开启没有管...我的虚拟机默认PSE貌似是开启滴不知是不是写的小工具有问题....对于x64下的等我有时间再写吧。 东西都上传在压缩包中了Codes文件夹下是工程源码Demo文件夹下是测试案例Tool文件夹放的是小工具的Demo和源码。 我的环境开发环境win7 sp1 x64  vs2013社区版 update5  wdk8.1       测试环境vm10  win7 sp1 x86 一、先说说未开启PAE的情况祭出intel手册的经典图例   这幅图就是虚拟地址转为物理地址的原理图4k页面看图说话用伪代码描述一下   1.Directory Entry(PDE)      PDBR[Directory];   2.Page-Table Entry(PTE)  PDE  Table * 4;   3.Physical Address   PTE  Offset;   由上可知Linear Address(线性地址)中的Directory和Table其实就是个索引在未开启PAE的情况下PDE、PTE均是32bit4字节所以要Table*4以上只是原理上的描述实际上PDE、PTE的后3位是属性值所以需要把后3位抹掉。   下边上关键代码基本都步骤都写了注释了有需要的可以封装成函数。此外本段代码只是测试用写的很不规范比如在调用MmMapIoSpace应该调用MmUnMapIoSpace释放内存。   // 得到ring3传入的虚拟地址size_t* pOutAddress (size_t*)MmGetSystemAddressForMdlSafe(pIrp-MdlAddress, NormalPagePriority);VIRTUAL_ADDRESS virtualAddress { 0 };virtualAddress.ulVirtualAddress *pOutAddress;ULONG pdbr;_asm{mov eax, cr3;mov pdbr, eax;}PHYSICAL_ADDRESS phyAddress { 0 };phyAddress.LowPart pdbr;PULONG pPdbr (PULONG)MmMapIoSpace(phyAddress, sizeof(PHYSICAL_ADDRESS), MmNonCached);KdPrint((pdbr 0x%08X, 映射后的地址0x%p\n, pdbr, pPdbr));// pPdbr[ulDirBaseIdx] 页目录项ULONG ulDirBaseIdx virtualAddress.stVirtualAddress.dirBaseIndex;ULONG ulDirIdx virtualAddress.stVirtualAddress.dirIndex;KdPrint((第一级已找到页目录所在项:pPdbr[%d]:0x%08X, ulDirBaseIdx,pPdbr[ulDirBaseIdx]));ULONG ulDir pPdbr[ulDirBaseIdx] 0xFFFFF000; // 抹去后3位得到真正的页目录项 ULONG ulDirPlus ulDir ulDirIdx * 4; // 页表项phyAddress.LowPart ulDirPlus;PULONG pDirPlus (PULONG)MmMapIoSpace(phyAddress, sizeof(PHYSICAL_ADDRESS), MmNonCached);KdPrint((第二级已找到页表项:ulDirPlus 0x%08X, 映射后的地址0x%p\n, ulDirPlus, pDirPlus));ULONG ulPageTable *pDirPlus 0xFFFFF000; // 抹去后3位得到真正的页表项// 得到物理地址ULONG ulPhyAddress ulPageTable virtualAddress.stVirtualAddress.offset;// 映射为虚拟地址获取其值进行验证phyAddress.LowPart ulPhyAddress;PWCHAR pPhyAddress (PWCHAR)MmMapIoSpace(phyAddress, sizeof(PHYSICAL_ADDRESS), MmNonCached);KdPrint((虚拟地址0x%08X, 对应物理地址0x%08X, Value:%S\n, *pOutAddress, ulPhyAddress, pPhyAddress));// 传出对应物理地址*pOutAddress ulPhyAddress;     二、开启PAE的情况       同样是4k页面的伪代码描述如下   1.Dir.Pointer Entry(PDPTE)   PDPTR[Directory Pointer];   2.Director Entry(PDE)   PDPTE  Directory * 0x8;   3.Page-Table Entry(PTE)   PDE  Table * 0x8;   4.Physical Address   PTEOffset;   在开启PAE的情况下PDE、PTE均是64bit8字节所以要*8同样PDE、PTE的后3位是属性值所以需要把后3位抹掉。   关键代码如下 // 得到传入的ring3层虚拟地址size_t* pOutAddress (size_t*)MmGetSystemAddressForMdlSafe(pIrp-MdlAddress, NormalPagePriority);VIRTUAL_ADDRESS virtualAddress { 0 };virtualAddress.ulVirtualAddress *pOutAddress;ULONG pdbr;// 得到页目录指针物理地址_asm{mov eax, cr3;mov pdbr, eax;}// 映射为虚拟地址以便取值PHYSICAL_ADDRESS phyAddress { 0 };phyAddress.LowPart pdbr;PULONG pPdbr (PULONG)MmMapIoSpace(phyAddress, sizeof(PHYSICAL_ADDRESS), MmNonCached);KdPrint((pdbr 0x%08X, 映射后的地址0x%p\n, pdbr, pPdbr));// 定位页目录指针表并获取页目录表物理页地址// ulDirAddress 为页目录表物理页地址ULONG ulPointerIdx virtualAddress.stVirtualAddress.dirPointer;ULONG ulDirBaseAddress pPdbr[ulPointerIdx];ulDirBaseAddress 0xFFFFF000; // 中间物理地址// 定位页表项ULONG ulDirAddress ulDirBaseAddress virtualAddress.stVirtualAddress.dirIndex * 0x8;phyAddress.LowPart ulDirAddress;PULONG pPageTable (PULONG)MmMapIoSpace(phyAddress, sizeof(PHYSICAL_ADDRESS), MmNonCached);ULONG ulPageTable *pPageTable;ulPageTable 0xFFFFF000; // 中间物理地址// 定位物理页面ulPageTable virtualAddress.stVirtualAddress.tableIndex * 0x8;phyAddress.LowPart ulPageTable;PULONG pPageBase (PULONG)MmMapIoSpace(phyAddress, sizeof(PHYSICAL_ADDRESS), MmNonCached);ULONG ulPageBase *pPageBase;ulPageBase 0xFFFFF000;// 得到物理地址ULONG ulPhyAddress ulPageBase virtualAddress.stVirtualAddress.offset;// 映射为虚拟地址获取其值进行验证phyAddress.LowPart ulPhyAddress;PWCHAR pPhyAddress (PWCHAR)MmMapIoSpace(phyAddress, sizeof(PHYSICAL_ADDRESS), MmNonCached);KdPrint((虚拟地址0x%08X, 对应物理地址0x%08X, Value:%S\n, *pOutAddress, ulPhyAddress, pPhyAddress));// 传出对应物理地址*pOutAddress ulPhyAddress;pIrp-IoStatus.Information cout; 以上代码步骤是参考安于此生的文章写的看不懂的可以先看看安于此生的文章《启用PAE后虚拟地址到物理地址的转换》 另附上小工具源码该工具用于检测系统是否开启PAE、PSE等。   #define BUFFERSIZE 0x3000 char g_szMemInfo[BUFFERSIZE] { 0 };// 以下code在 DriverEntry 中DWORD dwPE 0; // Protection Enable cr0[0]DWORD dwWP 0; // Write Protect cr0[16]DWORD dwPG 0; // Paging cr0[31]DWORD dwPAE 0; // 物理地址扩展 cr4[5]DWORD dwPSE 0; // Page Size Extension cr4[4]DWORD dwCr0 0;DWORD dwCr4 0;// 注册卸载函数pDriverObj-DriverUnload driverUnload;_asm{pushad;mov eax, cr0;mov dwCr0, eax;// PE标志位and eax, 0x01;mov dwPE, eax;mov eax, cr0;// WP标志位and eax, 0x10000;mov dwWP, eax;mov eax, cr0;// PG标志位and eax, 0x80000000;mov dwPG, eax;// PAE//mov eax, cr4; 机器码如下_emit 0x0F;_emit 0x20;_emit 0xE0;mov dwCr4, eax;and eax, 0x20;mov dwPAE, eax;// PSE_emit 0x0F;_emit 0x20;_emit 0xE0;and eax, 0x10;mov dwPSE, eax;popad;}KdPrint((PE 0x%08X\r\n,dwPE));KdPrint((WP 0x%08X\r\n,dwWP));KdPrint((PG 0x%08X\r\n,dwPG));KdPrint((PAE 0x%08X\r\n,dwPAE));KdPrint((PSE 0x%08X\r\n,dwPSE));KdPrint((Cr0 0x%08X\r\n,dwCr0));KdPrint((Cr4 0x%08X\r\n,dwCr4));//----------------------------------------------------------------------------// PE标志位if (0 ! dwPE){RtlStringCchCatNA(g_szMemInfo, BUFFERSIZE, ----------------------保护模式(PE1)-------------------\r\n,BUFFERSIZE - sizeof(----------------------保护模式(PE1)-------------------\r\n));}else{RtlStringCchCatNA(g_szMemInfo,BUFFERSIZE ,----------------------实地址模式(PE0)-------------------\r\n,BUFFERSIZE - sizeof(----------------------实地址模式(PE0)-------------------\r\n));}//----------------------------------------------------------------------------// WP标志位if (0 ! dwWP){RtlStringCchCatA(g_szMemInfo,BUFFERSIZE,内存写保护(WP)开启...\r\n);}else{RtlStringCchCatA(g_szMemInfo,BUFFERSIZE,内存写保护(WP)禁止...\r\n);}//----------------------------------------------------------------------------// PG标志位if (0 ! dwPG){RtlStringCchCatA(g_szMemInfo,BUFFERSIZE,页机制(PG)启用\r\n);}else{RtlStringCchCatA(g_szMemInfo,BUFFERSIZE,页机制(PG)禁止\r\n);}//----------------------------------------------------------------------------// PAE标志位if (0 ! dwPAE){RtlStringCchCatA(g_szMemInfo,BUFFERSIZE,物理地址扩展(PAE)已开启\r\n);}else{RtlStringCchCatA(g_szMemInfo,BUFFERSIZE,物理地址扩展(PAE)未启用\r\n);}//----------------------------------------------------------------------------// PSE标志位if (0 ! dwPSE){RtlStringCchCatA(g_szMemInfo,BUFFERSIZE,页面大小扩展(PSE)已开启\r\n);}else{RtlStringCchCatA(g_szMemInfo,BUFFERSIZE,页面大小扩展(PSE)未启用\r\n);}KdPrint((%s\r\n, g_szMemInfo));   最后看看效果运行图。Demo是在ring3层定义一个Unicoe字符串“Lthis”,然后将其虚拟地址传入ring0层ring0解析后传出对应的物理地址。 开启PAE下运行的效果         未开启PAE的运行效果   附件地址链接http://pan.baidu.com/s/1kTENdnL 密码g5j7  转载于:https://www.cnblogs.com/Lthis/p/4746795.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/912972.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

山南网站建设做网站需要什么费用

文章目录 Linux Shell脚本文件vim编辑器vi的使用 认识Bash变量环境变量用户操作变量delcare与typeset 命令的别名与历史命名 正则表达式Shell ScriptsShell Scripts良好习惯第一个shell其他shell例子 - 来自鸟哥linux私房菜语法介绍shell 的调试 Linux Shell脚本文件 vim编辑器…

网站建设河北石家庄学做烤制食品的网站

【精选】Kafka、RocketMQ、RabbitMQ的比较总结_kafka rabbitmq rocketmq_【江湖】三津的博客-CSDN博客

怎么自己做网站模板整站seo排名外包

智慧医院3D人体导诊系统源码 开发语言:java 开发工具:IDEA 前端框架:Uniapp 后端框架:springboot 数 据 库:mysql 移 动 端:微信小程序、H5 “智慧导诊”以人工智能手段为依托,为人们提供智能分诊、问病信息等服务,在一定程度上满足了人们自我健康管理、精准挂号…

实用指南:C++编程学习(第34天)

实用指南:C++编程学习(第34天)2025-09-23 15:14 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !impor…

Java集合 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

用前端(HTML+Node.js)实现物品借用登记:完整代码示例

在日常工作中,经常需要借用各种办公或实验设备、工具及耗材。为了方便管理借用记录、防止物品丢失,同时提高办公效率,我设计了一个前端小程序——物品借用登记系统。该系统支持记录借用人、物品名称、数量、借用说明…

Google智能体Jules小试牛刀

Google智能体Jules小试牛刀Jules 能做什么Google 的 Jules 是一个编程相关的 AI 助手(coding agent),它可以在背景中异步地处理各种代码任务,让开发者腾出时间专注于更重要/更有创意的工作。 处理各种编码任务 Ju…

免费浏览的网站完全静态化成wordpress

一、Ken Burns特效 当使用OpenCV时,最常使用的是图像,但是我们也可以多个图像创建动画,通过引入时间轴更容易可视化。 Ken Burns特效这是一种以电影制片人肯伯恩斯 (Ken Burns) 命名的平移和缩放技术,Ken Burns 效果不是在屏幕上显示大型静态照片,而是裁剪细节,然后平移图…

泰安网站制作哪家好wordpress 建站教程

日志记录是软件开发中不可或缺的功能,它能帮助开发者在应用程序运行时记录重要信息,便于调试和监控。本文将详细介绍C#中的常用日志记录功能以及常用的日志库,包括日志级别控制、日志输出格式、自定义日志目标、结构化日志和异步日志记录。同…

深圳网站设计公司哪家好境外注册网站

根据现实需要,此系统我们设计出一下功能,主要有以下功能模板。 (1)新闻发布系统前台:首页、时事新闻、公告资讯、个人中心。 (2)管理员功能:首页、个人中心、用户管理、新闻分类管理…

wordpress第一个版本学seo可以做网站吗

目录 MySQL数据库提权简介 UDF提权 原理 利用条件 利用准备 利用过程 MOF提权 原理 利用条件 利用过程 自启动提权 反弹shell提权 总结 MySQL数据库提权简介 一般数据库提权思路: 检测数据库的存在(探测端口)获取到数据库的权限…

网站怎么做首页比较好燕郊seo

docker基本命令是一个开源的应用容器引擎;是一个轻量级容器技术;docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上);docker客户端(Client):连接docker主机进行操作&#…

外包做网站一般多少钱wordpress中文标题转换拼音插件

用户管理 一个用户必须有一个主组一个用户可以拥有多个组 但是必须一个主组 其它组是临时组一个组可以拥有多个用户用户的信息放到 /etc/passwd 用户的密码 存入 /etc/shadow 组信息存到 /etc/group添加用户 add useradd shengliang 这时候会在 /etc/passwd 下生成一条记录 she…

珠宝行业网站建设生活馆网站开发背景

目录 1.定时任务实现 2.quartz说明 3.存储方式 4.示例 5.定时任务的重新定制,恢复,暂停及删除 1.定时任务实现 定时任务的实现方式有很多,如下: 1.启动类中添加EnableScheduling,开启定时任务功能,然…

搞笑椅子机房语录

抽象2025.9.23 (已知院长同学很爱唱“我要当主席”,此时正在唱校歌) 47:咋都开始唱校歌了 院长:我都当主席了还不能唱校歌了? 珂乌:还是当主席吧

在AI技术快速实现创意的时代,挖掘渗透测试框架新需求成为关键挑战

该篇文章无摘要a.内容描述核心功能定位:该项目是一个可扩展的后渗透测试和对抗仿真框架,采用服务器/客户端架构设计,主要面向专业渗透测试人员。服务器端采用Golang开发,客户端采用C++ QT框架实现跨平台支持。关键…

基于区域的空间域图像融合MATLAB实现

基于区域的空间域图像融合MATLAB实现,结合多尺度区域分割与特征加权策略一、方法原理区域分割 采用SLIC超像素分割算法将图像划分为均匀区域,每个区域包含约200-300个像素。 区域特征提取颜色特征:HSV空间均值 纹理…

网站seo自己怎么做什么是关键词

前言 对象图和包图依然是对系统的静态的描写叙述。UML九种图加上包图,事实上是十幅图。 包图 1.构成 2.包中的元素 类、接口、用例、构件、其他包等。(若包被撤销,当中的元素被撤销) 3.包之间的关系 泛化、细化、依赖(…

甘肃建设职工教育培训中心网站计算机网络设计是干什么的工作

文章目录 前言一、安装cudn二、安装cudnn三、安装pytorch 前言 确保Windows系统版本高于windows10 21H2或Windows11,然后在Windows中将显卡驱动升级到最新即可,WSL2已支持对显卡的直接调用。 一、安装cudn 进入英伟达官网中的cuda下载地址&#xff1…