我们知道,当今主流的x86/x64 Intel处理器默认都使用了保护模式,不同于8086时代的实模式机制,保护模式和分页机制实现了内核层与用户层隔离,进程间执行环境隔离。
对Win32系统比较熟悉的人都知道系统为每一个进程都分配了4GB的进程空间,其中低2GB是用户层空间,而高2GB是内核层空间,而内存地址使用的分页机制下的虚拟地址,而虚拟地址需要通过分页机制的层层转换,才能找到映射该内存地址的物理地址,下面让我们使用WinDbg工具来看一下系统如何通过虚拟地址找到真正的物理地址:
首先要构建一个双机调试环境(见另一篇文章看,本文使用的虚拟机为Win7 x86 sp1),我使用的WinDbg和virtualKD,将virtualKD的插件装到虚拟机中,然后重启虚拟机:
选择window 7 [virtualKD] [启用调试程序]:
然后等虚拟机进入桌面后,打开记事本,输入一串字符串(那就”Hello World!“吧。。。)
然后点击WinDbg的break按钮,使操作系统断下来
使用 !process 0 0 命令查看当前系统所有进程信息,找到记事本所在进程