接下来我们将做一个实验,使用OD调试器动态分析已经加载到内存中的PE文件。
实验五:动态分析32位PE文件
使用DTDebug调试器随便打开一个进程,我们以一个32位记事本程序为例,看一下它的低2GB(0~2G)内存空间的分布。
提示
DTDebug.exe调试器是昆山滴水信息技术有限公司开发的一个具有R3访问权限的调试器,可以动态调试分析具有R3权限的普通应用程序。可以在编程达人官网www.bcdaren.com免费下载。
使用DTDebug调试器将一个普通32位PE文件(R3访问权限)加载到内存后,我们只可以观察到0~2GB的虚拟内存空间。
将notepad32.exe拖入调试器,点击工具栏“M”按钮,打开内存映射窗口,如图2-15所示:
图2-15 动态分析32位记事本
先从整体观察,内存映射窗口显示的虚拟地址范围刚好是低2GB的用户空间。用户空间的前后64KB内存为空,不可访问。因为在32位操作系统的用户空间(低2GB)中,通常会保留一些特殊的区域,其中包括前后各64KB的空间被称为“guard pages”(保护页),它们是不可访问的。这些保护页的存在是为了提高程序的安全性和稳定性。
保护页的作用如下:
●安全性: 保护页的存在可以防止用户进程越界访问。如果用户进程意外或恶意地访问了这些保护页,操作系统会检测到该错误并触发访问异常,使进程崩溃或被终止,从而保护系统的安全性。
●调试和异常处理: 保护页还可以用于调试和异常处理。当用户进程发生异常(如访问无效的内存地址)时,操作系统可以使用这些保护页来收集有关异常的信息,并进行相应的调试和处理操作。
●内存保留: 保护页也可以用于保留一些内存空间,以备将来使用。这样,操作系统可以根据需要动态地分配和管理这些空间,而不需要将其分配给用户进程。
【注意】保护页的大小通常是根据操作系统和硬件架构而定的,并不局限于64KB。这个大小可能会因不同的系统而有所不同。
低2GB虚拟内存空间的分配如表2-3所示:
虚拟内存地址范围 |
功能 |
0x0~0xFFFF |
拒绝访问区域,用于帮助程序员避免引用错误的指针;试图访问这个区域地址将会导致访问越权。 |
0x10000~0x7FFEFFFF |
进程专用地址空间。 |
0x7EFDE000~0x7EFDEFFF |
用于第一个线程的线程环境块(TEB)。系统会在这一页的前面创建附加的TEB(从地址0x7FFDD000开始向上)。每创建一个线程都会在此区间分配一个线程环境块。 |
0x7FFDF000~0x7FFDFFFF |
进程环境块(PEB)。 |
0x7FFE0000~0x7FFE0FFF |
共享的用户数据页&# |