论文部分内容阅读
可执行文件是一个操作系统中最重要的文件类型,它是操作系统中程序的真正执行者。可执行程序的运行速度、大小、资源占用情况以及程序的可移植性、可扩展性等都与可执行文件格式的定义和加载过程是紧密相关的。Windows作为目前应用市场最广泛的操作系统,研究它的可执行文件格式和可执行文件的加载连接过程,对理解系统背后的机理大有好处,对编写高性能程序和一些黑客技术的运用也大有帮助。本文首先从Windows系统的存储结构出发,分析了Windows进程虚拟地址空间的作用和基本分区;分析了Windows操作系统对虚拟内存、物理内存的组织管理方式,和它们之间的映射方式;分析了共享内存区的结构,实现原理和建立过程。其次分析了PE格式的整体框架,及各个组成部分的存在意义和在函数加载及链接过程中所起的作用,重点分析了头部、数据目录、Import Table、Outport Tabel的结构和作用。然后贯穿一个可执行程序的启动过程,详细的阐述了EXE文件、初始化DLL、其他DLL的加载时机,以及加载过程中的:建立共享内存区Section、把Section映射到进程虚拟空间、加载到物理磁盘的详细过程。最后,为了验证前面对PE文件的加载、执行机制理解的正确性,本课题应用该机制设计了一个基于Windows标准API的用户级单进程迁移项目,选做该项目的原因是:进程迁移是保护关键数据和服务不间断运行的关键技术之一,也是合理有效地利用资源、支持系统动态负载平衡、提高系统整体性能和系统可用性的关键技术之一,而基于目前应用最为广泛的Windows操作系统,这方面的研究却很少。本文最终实现了该项目的基本功能原型,在设计中使用了线程注入、DES数据加密等技术,并进行了测试和分析,最终证明了本文对Windows系统下PE可执行文件的加载和执行机制的理解是正确的。另外,希望以后可以在这个领域做更多的研究,使这个原型进一步完善,并能够应用于动态负载平衡、灾难备份、机群系统等领域。