PE文件学习笔记

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

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

 

 

编译Hello World

 

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

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

 

PE文件与虚拟内存映射

Win32 下系统为每个进程分配了 3G 大小的虚拟内存空间,进程运行时,将所需动态链接库以及 PE 文件等,
加载到虚拟内存中, .exe 文件装载基址为 00400000 。
PE 文件与虚拟内存 之间映射关系

内存中进程地址空间分区
进程地址空间分区(内核模式)
内核模式分区存放操作系统驻留代码。线程调度,内存管理,文件系统支持,网络支持和所有设备驱动程序代码都存放于此。此分区可被所用进程共享。试图访问此分区中的内存地址,进程将会引发内存非法访问,系统向用户提示并将应用程序关闭。
(那么所有进程又是如何共享此分区的呢?)

进程地址空间分区(64KB禁止进入)
为了操作系统实现的简单而设此分区,假设用户模式分区和内核模式分区紧挨,在用户模式下分配一段空间可能会影响到内核模式分区。设置64kb禁止进入区就可以防止违规访问,避免内核代码受到影响。
进程地址空间分区(无效断点分配)
此分区用于帮助程序员捕获无效断点分配(叫无效指针分配更好一些)。
当函数返回 null ( 0x00000000 )时,对该内存地址进行访问,将被认定为非法访问操作,操作系统终止这个进程的运行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值