您好、欢迎来到现金彩票网!
当前位置:打鱼棋牌游戏平台 > 物理分页 >

使用WinDbg查看保护模式分页机制下的物理地址

发布时间:2019-07-31 06:59 来源:未知 编辑:admin

  我们知道,当今主流的x86/x64 Intel处理器默认都使用了保护模式,不同于8086时代的实模式机制,保护模式和分页机制实现了内核层与用户层隔离,进程间执行环境隔离。

  对Win32系统比较熟悉的人都知道系统为每一个进程都分配了4GB的进程空间,其中低2GB是用户层空间,而高2GB是内核层空间,而内存地址使用的分页机制下的虚拟地址,而虚拟地址需要通过分页机制的层层转换,才能找到映射该内存地址的物理地址,下面让我们使用WinDbg工具来看一下系统如何通过虚拟地址找到真正的物理地址:

  首先要构建一个双机调试环境(见另一篇文章看,本文使用的虚拟机为Win7 x86 sp1),我使用的WinDbg和virtualKD,将virtualKD的插件装到虚拟机中,然后重启虚拟机:

  然后等虚拟机进入桌面后,打开记事本,输入一串字符串(那就”Hello World!“吧。。。)

  使用 !process 0 0 命令查看当前系统所有进程信息,找到记事本所在进程

  然后我们使用s -u命令再记事本进程中搜索 Hello World! 这个字符串

  在上面两个地址处都保存有字符串 Hello World! 我们取第一个虚拟地址0x001ee148,求出此地址在计算机内存内所对应的物理地址。

  下面来说以下Win32 X86下虚拟地址的构成,在开启PAE模式的情况下,一个32位的虚拟地址有以下几部分组成:

  通过 r cr3命令查看cr3寄存器的值,得到cr3=7eaf6540,即为页目录的基址(注意,cr3保存的是物理地址,用WinDbg查看物理地址时要在最前面加上!符号)。

  因为页目录表索引为0,所以使用 !dq 7eaf6540+0*8查看页目录的基址

  页目录和页表的每一项都是8个字节,其中第12-31位保存了页表的基址。从之前对虚拟地址的分解可知,页目录项的索引为0,也就是是第一项,所以页目录的基址为3a4b6000,而页目录索引为0

  正好是我们的Hello World字符串,所以我们成功地根据虚拟地址通过分页机制找到了物理地址。

  使用WinDBG观察启用PAE后的分页机制我在《软件调试》一书的2.7节介绍了CPU的分页机制,因为这属于这本书的支持性内容,考虑篇幅限制,没有介绍启用PAE的情况。书出版后,很多读者对这一内容很感兴...博文来自:Kevins的天空

  分页是在应用程序对内存的需要越来越大的情况下出现的,为了满足应用程序对内存可寻址地址超过4MB的需要,在80386开始就加入了分页机制。分页机制是针对某一个任务的,或者更准确的说是针对某一个段的。我们...博文来自:weixin_39162701的博客

  1、下载好windbg,设置好变量symbols(去官网下载对应版本的symbols)2、进入kerneldebug模式的本机调试(内核调试模式),我是在xp虚拟机下进行的。3、用!process00...博文来自:小雅的博客

  正在逐章学习《调试软件》一书,看到2.7分页机制。仿照书上的例子,试着手工把虚拟地址转换到物理地址。由于书中的例子是针对未开启PAE的情况,而我的XPSP2默认开启了PAE,所以白白浪费了大半天时间。...博文来自:梵·烈火的专栏

  .写在开头的话今天学习了分页机制中的虚拟内存地址到物理内存地址的转换,做些笔记。首先也是非常需要注意的是这个PAE(物理地址扩展),这个东西是默认开启的,由于不开启PAE时候的计算要相对简单一些,所以...博文来自:FadeTrack

  开启分页机制必须说明的是,必须在保护模式下才能启动分页功能。本章的引导程序依然用第13章的。开启分页机制之前,必须创建页目录和页表。...博文来自:车子(chezi)

  操作系统将物理内存虚拟化,从而管理内存,将每个进程的运行空间隔离,形成多任务的操作系统。物理内存虚拟化后,在操作系统的基础上有以下几个名词概念,需要深刻理解,网络上很多博客和帖子常常对此解释出现误差、...博文来自:even的博客

  原文地址:本文将用一个小例子说明如何在32位cpu下手工将虚拟地址转换内存中的...博文来自:Stay Hungry , Stay Foolish

  一、安装从下面的链接或其他链接下载安装:DownloadDebuggingtoolsforWindows二、配置常用的配置就是符号文件搜索路径、可执行文件搜索路径、源码文件搜索路径配置。符号文件搜索路...博文来自:Deep in Windows

  分享windbg工具使用手册教程,资料很全,记录一下,并分享给博友们,链接如下:博文来自:xuan_xuan_2的博客

  1.因为内核调试涉及到的是windows系统,所以只能在windows上运行,首先安装xp虚拟机;2.然后配置文件,由于boot.ini文件在xp系统中是被隐藏的,所以需要先取消xp的...博文来自:lirunling的博客

  1.概述一个进程的虚拟地址空间是4GB,它的物理大小并不是线GB,那运行中的所有进程都加起来占用的空间是一个天文数字,事实上系统会对这4GB的地址空间进行转换,然后映射到物理内存...博文来自:tutucoo

  1.概述10-10-12分页方式最多可达4GB的物理地址,但是随着硬件的发展,4GB的物理地址无法满足要求,因此出现了2-9-9-12分页,这种分布方式又被称为PAE分页。为什么会出现2-9-9-12...博文来自:tutucoo

  Mit6.828Lab2:主要讲虚拟内存-物理内存的变换,通过一定的函数来实现软件MMU的部分。...博文来自:fang92的专栏

  有关IA-32分段可参考:IA-32保护模式下的内存寻址方式(一):分段1、分页、页、页框、缺页异常、页表的概念简述:MMU的分页单元(Pagingunit)会把通过MMU分段单元(segmentat...博文来自:Apollon_krj的博客

  Windbg简单来说就是一个Windows下对用户态/内核态的程序进行调试,以及对CoreDump文件的分析。对于Crash,资源泄露,死锁等问题的分析,Windbg是一个强有力的利器。相关资料本人也...博文来自:太阳落雨

  一、WinDbg是什么?它能做什么?WinDbg是在windows平台下,强大的用户态...博文来自:beckdon的专栏

  WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。1.WinDbg介绍:   DebuggingTo...博文来自:轻锋的专栏

  查看和调试windows内核的一些东西难免需要用到WinDbg1先安装WinDbg,这个东西windows自带的软件中心就有,不用费时间去网上找安装包,直接上官网下载,WinDbg,直接点击页面里的D...博文来自:chaootis1的博客

  我们身边的很多软件都引入了dump生成和收集机制。但是一般情况下,它们都是生成minidump。因为minidump文件相对来说很小,方面我们收集上来进行分析。但是Minidump保存了很少的信息,在...博文来自:方亮的专栏

  在工作中经常需要查看dump,虽然现在VC2015已经做的非常好了,尤其是对map的解析,非常方便,而且enum可以直接显示定义字符串。但windbg却有一些vc没有提供的功能(可能我没有发现~~),...博文来自:spacegrass的专栏

  本文对X86系列的虚拟地址映射方式进行详细介绍。包括8086的实地址映射和80386的保护模式的地址映射。并简单介绍了保护模式下的段页式管理的方式。...博文来自:LeeHannahSylvia的博客

  操作系统对死锁的描述如下:所谓死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。   那么为什么会产生死锁呢?1.因为系统资源不足。...博文来自:swartz_lubel的专栏

  WinDbg WinDbg支持以下三种类型的命令: ·       常规命令,用来调试进程 ·       点命令,用来控制调试器 ·       扩展命令,可以添加叫WinDbg的自定义命令,一般由...博文来自:独上高楼,望断天涯路

  本文主要介绍WinDbg的入门知识,包括:下载安装、启动、配置和简单的用户模式调试示例。在我学习WinDbg的过程,主要参考了“WinDbg软件自带的用户手册”和博文来自:Sagittarius_Warrior的博客

  六、内存相关内存管理一直都是很大的话题,内存问题也是程序中最常见的问题。一般常见的内存问题有:悬挂指针(DanglingPointer)、重复释放(DoubleFree)、内存泄露(MemoryLea...博文来自:ecjtu_luowei的专栏

  //查看符号文件有无加载进windbg中,2.2加载设置的符号文件   .reload  可以使用菜单中的 Debug-Modules 查看有没有加载进来...博文来自:证券指标的专栏

  Windbg常用命令总结查看线程中的堆栈信息a.~打印出所有的线程信息b.!teb命令查看线程控制块中的信息,如StatckBase:01820000c.dps01820000则可以看到线程运行的St...博文来自:硕硕的博客

  windbgattach上去通过!runaway命令来列出各线程所耗费的时间找到时间较高的,通过ProcessesandThreads窗口双击线程切换到目标线跑一段看看调用堆栈即可。...博文来自:MengXP的博客

  一、前言WinDBG作为Microsoft的御用工具,其强大之处使我这等小辈难以望其项背,它设计了极其丰富的功能来支持各种调试任务,包括用户态调试、内核态调试、dump文件调试、远程调试等。其灵活性和...博文来自:ecjtu_luowei的专栏

  6.2  终结方法C++语言里面有个概念叫做析构函数,析构函数的语法和C#的终结方法一样,都是通过“~”+类名作为函数名。也有人把C#的终结方法叫做析构函数,然而我还是比较喜欢终结方法这种叫法,一者因...博文来自:ecjtu_luowei的专栏

  无论是分析程序崩溃原因,还是解决程序hang问题,我们最常查看的就是程序调用堆栈。学会windbg调用...博文来自:xumaojun的专栏

  kk*命令显示给定线程的调用堆栈,以及其他相关信息~0k表示打印0号线程的调用堆栈,直接用k表示打印当前线kChildEBPRetAddr0007fddc77...博文来自:hgy413的专栏

  目录:(1)u命令(反汇编)(2)dt命令(查看数据结构)(3)ln命令(查找就近的符号)(4)x命令(显示模块的符号)(5)k命令(显示调用栈)(6)d命令(以数据方式显示)(7)b命令(断点)(8...博文来自:wesley2005的专栏

  C++程序开发中,开发的程序给测试人员进行测试。如果测试人员测试出崩溃级别的bug,这时候,需要我们在程序中添加崩溃时生成DMP文件的接口,然后测试人员按操作运行生成崩溃文件,开发人员使用DM...博文来自:u010340160的博客

http://lotusyogacenter.com/wulifenye/428.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有