读书人

PE资料相关内容

发布时间: 2012-09-01 09:33:02 作者: rapoo

PE文件相关内容

?? ? ?了解PE文件是了解windows系统的必经之路。下面把自己学习PE文件相关知识的方法以及经验和大家分享,其中前半部分在很大程度上参考了《windows核心编程》,只是简单的从中提取出个人认为精炼的分析,并添加一点个人的理解。如果你也想学习windows编程,了解windows系统是如何运行的,那么这本书绝对不可或缺。

学习一种新知识总喜欢用“hello world”开始。呵呵。

?

view plaincopy to clipboardprint?
  1. #include<stdio.h>??
  2. int?main()??
  3. {??
  4. ????printf("Hello?world!\n");??
  5. ????return?0;??
  6. }??
?

?

编译Hello World

使用windows的cl.exe对Hello World源文件进行编译,生成.exe文件,即PE(Portable Execute)文件。使用PEiD(一个用于分析PE文件的工具,可在网上下载)对其进行分析,得到PE文件的格式。

可以查看各section的偏移量及大小,如下图

PE资料相关内容

PE文件与虚拟内存映射

Win32下系统为每个进程分配了3G大小的虚拟内存空间,进程运行时,将所需动态链接库以及PE文件等,加载到虚拟内存中,.exe文件装载基址为00400000。PE文件与虚拟内存之间映射关系PE资料相关内容
内存中进程地址空间分区PE资料相关内容进程地址空间分区(内核模式)内核模式分区存放操作系统驻留代码。线程调度,内存管理,文件系统支持,网络支持和所有设备驱动程序代码都存放于此。此分区可被所用进程共享。试图访问此分区中的内存地址,进程将会引发内存非法访问,系统向用户提示并将应用程序关闭。(那么所有进程又是如何共享此分区的呢?)现在想来自己这个曾经的疑问是多么的幼稚!每个进程拥有独立的4G虚拟内存,内存管理模块专门用来将需要运行的代码在外存和内存间调度,对于核心的系统服务代码,用户态代码只能通过系统调用服务来访问。
进程地址空间分区(64KB禁止进入)为了操作系统实现的简单而设此分区,假设用户模式分区和内核模式分区紧挨,在用户模式下分配一段空间可能会影响到内核模式分区。设置64kb禁止进入区就可以防止违规访问,避免内核代码受到影响。进程地址空间分区(无效断点分配)此分区用于帮助程序员捕获无效断点分配(叫无效指针分配更好一些)。当函数返回null(0x00000000)时,对该内存地址进行访问,将被认定为非法访问操作,操作系统终止这个进程的运行。
留个问题:对于一个目前流行的操作系统,一个程序仅使用内存而不需要考虑人工调度,最大可以处理多大的数据呢,也就是说数据段是可变的吗?最多可以多大?代码段有限制吗?程序是不是也不能太大,当然一般的程序不会大到这个地步。

读书人网 >操作系统

热点推荐