游戏网站服务器租用襄城县住房和城乡建设局网站

news/2025/10/9 6:50:12/文章来源:
游戏网站服务器租用,襄城县住房和城乡建设局网站,中国建设银行信用卡中心官网,广州网站建设 知名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/932240.shtml

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

相关文章

读技术之外:社会联结中的人工智能04数据

1. 数据 1.1. NIST1.1.1. 美国国家标准与技术研究所 (National Institute of Standards and Technology, NIST)1.1.2. NIST成立于1901年,旨在加强国家测量基础设施建设,并为与工业化世界中的经济竞争对手(如德国和英…

做的比较简约的网站有哪些免费做电子名片的网站

在Ubuntu中,你可以使用du命令来查看文件夹的大小。du命令的全称是"disk usage",用于估计和显示目录或文件的磁盘使用空间。 如果你想查看某个特定文件夹的大小,你可以使用以下命令: du -sh /path/to/directory在这个命…

国家知识产权专利网官网电影网站怎么做优化

[html] input上传图片怎样触发默认拍照功能? 使用 capture 属性,capture 的值可以是:camera 打开摄像头user 打开前置摄像头environment 打开后置摄像头以上几个属性都不能保证设备会按照设置的一样打开前置或后置摄像头,如果设备…

泉州网站建站模板广州网站商城建设

剑指 Offer 20. 表示数值的字符串、29. 顺时针打印矩阵、31. 栈的压入、弹出序列、67. 把字符串转换成整数 题目描述: [20] 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 数值(按顺序)可以分成以下几…

大兴网站开发phpmysql做网站

硬件产品的成本构成一款硬件产品的成本由许多因素构成,主要可以归为三类:研发成本、产品边际成本和服务成本。这里借用了经济学中的一个概念:边际成本,即增加一单位的产量所带来的成本增加量。对于任何一款硬件产品,每…

宜昌网站推广免费响应式企业网站源码

《软件设计的哲学》(A Philosophy of Software Design)是一本在软件架构与设计领域颇具影响力的书籍,作者 John Ousterhout 在书中分享了诸多深刻且实用的软件设计理念。书中列举的这些设计原则,汇聚了作者丰富的实战经验与深邃的…

建设网站应达到的目的和作用wordpress博客优化插件

1.引用变量 应用变量和指针十分相似,但是要注意二者的区别;例如,引用变量在声明引用时也要初始化,而不能像指针那样先声明再赋值。引用更接近const 指针。 int rat; int & rats rat; //int & rat…

平面设计网站灵感在线制作免费生成水印

图像按矩阵缩放:Matrix matrix new Matrix();matrix.postScale(...);matrix.postTranslate(...);matrix.postRotate(...);...我希望缩放的图像不会小于原始图像的一半,因此总变焦不应小于0.5.但是怎么做呢?我试图获取矩阵的第一个值来检查:f…

Potplayer Official Download LINK

http://potplayer.tv/ https://potplayer.daum.net/64 BIT: https://t1.daumcdn.net/potplayer/PotPlayer/Version/Latest/PotPlayerSetup64.exe

佛山企业网站建设渠道北京企业名录

文章目录 完全背包518. 零钱兑换 II (求组合方法数)思路分析代码实现思考总结 377. 组合总和 Ⅳ (求排列方法数)思路分析代码实现思考总结 完全背包 完全背包和01背包问题唯一不同的地方就是,每种物品有无限件。 依然举这个例子: 背包最大重量为4。 物…

各大网站提交入口网址空间中国网站

中介者(Mediator)模式是一种行为设计模式,它定义了一个对象来封装一组对象之间的交互。中介者对象负责控制和协调这些对象之间的交互,使得这些对象不需要显式地相互引用,从而降低它们之间的耦合。 以下是一个简单的中…

二廿计划(25.10.09 - 25.10.29)

目录09-13 15-18 19-23 24-2809-13 09本文来自博客园,作者:cwkapn,转载请注明原文链接:https://www.cnblogs.com/cwkapn/p/19129771

本地做那种网站好一些邯郸网站制

在使用R语言进行数据可视化的时候,常常需要将多张统计图表绘制在同一张图上面,从而更高效地传递信息,下面我们就来一起看看具体如何实现。一、使用R语言自带的函数绘制的图像R语言本身就已经内置了许多绘图函数,能够满足较为基本的…

阴阳师网站怎么做设计中国第一架飞机

1.首先,我是因为重装了ubantu系统,不得不重新配置ssh 2.第一步,在本机的终端安装ssh插件: (1) (2)restart开启这个ssh端口 3.然后,就在vscode里面,安装哪个…

商标查询网站医疗器械分类目录2021

5、hue整合oozie 第一步:停止oozie与hue的进程 通过命令停止oozie与hue的进程,准备修改oozie与hue的配置文件 第二步:修改oozie的配置文件(老版本的bug,新版本已经不需要了)这一步我们都不需要做了 修改ooz…

建网站学什么专业云游戏平台网页版

以占用内存的方式修改文件 待修改的文件 word1.txt,文件内容如下:现在要将文中的“汪淼”修改为“WM”,代码如下:#!-*-coding:utf-8-*- old_str 汪淼 new_str WM f1 open(word1.txt,r,encoding"utf-8") #…

怎么用ps切片在dw里做网站深圳网站建设制作设计平台

前言 在构建分布式系统时,选择适合的消息中间件是至关重要的决策。RabbitMQ、Kafka、ActiveMQ 和 RocketMQ 是当前流行的消息中间件之一,它们各自具有独特的特点和适用场景。本文将对这四种消息中间件进行综合比较,帮助您在项目中作出明智的…

网站充值接口怎么做新加坡网站后缀

MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNC工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时 MinGW,即 Minimalist GNU For Windows。它是一些头文件和端口库的集合,该集合允许人们在没有第三方动态链…

网站建设 爱诚科技公司通用网址通用网站查询

序 unity是自带天空盒的: 但有的时候不想用自带的。怎么自定义?如何设置? 官方文档 Unity - Manual: The Lighting window (unity3d.com) 相关窗口的打开方法 天空盒对应的选项 实际操作 从标准材质球到天空盒材质球 新建一个材质球&…