热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PE文件结构初学

PE的意思是PortableExecutable(可移植的执行体),它是Win32环境自身所带的执行文件格式。在Win32系统中,PE文件可以认为.exe、.dll、.sys、.scr类型的

PE 的意思是 Portable Executable(可移植的执行体),它是 Win32环境自身所带的执行文件格式。在Win32系统中,PE文件可以认为.exe、.dll、.sys 、.scr类型的文件,这些文件在磁盘上存贮的格式都是有一定规律的。

PE格式的文件通过16进制数对文件的数据内容进行表示。

PE结构可以理解:Windows系统对文件进行识别后,按照固定的数据组织形式进行解读,然后在该系统下进行某些操作。这种系统识别的固定数据组织形式被称为PE文件结构。故,学习PE文件就是学习Windows系统的这种固定的数据组织形式。

下面是一个用16进制工具UE打开的pe文件后,我们所看到的样子。UltraEdit工具

Sys:系统文件,如驱动文件。

一个完整的PE文件主要有上面4个部分组成

1、Dos部分主要用来对非FE格式文件的处理,DOS时代遗留的产物,是PE文件的一个遗传基因,主要用来对非FE格式文件的处理.

2、PE头部分用于宏观上记录文件的一些信息,分用于宏观上记录文件的一些信息,运行平台,大小,创建日期,属性等.

3、节表部分用于对各中类型的数据进行定义分段。用于对各中类型的数据进行定义分段.

4、节数据不言而喻就是文件的数据部分,实际上我们编写程序的过程中就是对该部分的数据进行编写。

而其他的部分则是由编译器依照我们编写的部分进行相应的填写而得到的。

 

DOS部分由如下两部分构成: Dos头和Dos块。

Dos头:长度40h,4行*16,

Dos块:长度不定DOS插桩代码,是DOS下的16位程序代码,只是为了显示上面的提示数据。这段代码是编译器在程序编译过程中自动添加的。

Dos头对于非pe结构的文件将指引dos可执行程序部分,也就指引到dos块。而对于PE结构的文件将指引到PE结构部分。具体如何指引是通过dos头结构进行指定的。

 

•IMAGE_DOS_HEADER STRUCT

•  e_magic             WORD      ?  ;DOS可执行文件标记,固定为“MZ”

•  e_cblp              WORD      ?

•  e_cp                WORD      ?

•  e_crlc              WORD      ?

•  e_cparhdr           WORD      ?

•  e_minalloc          WORD      ?

•  e_maxalloc          WORD      ?

•  e_ss                WORD      ?  ;DOS代码的初始化堆栈段

•  e_sp                WORD      ?  ;DOS代码的初始化堆栈指针

•  e_csum              WORD      ?

•  e_ip                WORD      ?  ;DOS代码的入口IP

•  e_cs                WORD      ?  ;DOS代码的入口CS

•  e_lfarlc            WORD      ?

•  e_ovno              WORD      ?

•  e_res               WORD   4 dup(?)

•  e_oemid             WORD      ?

•  e_oeminfo           WORD      ?

•  e_res2              WORD  10 dup(?)

•  e_lfanew            DWORD      ?  ;指向PE文件的头部

•IMAGE_DOS_HEADER ENDS

这里是对dos头结构的完整定义,该字段的长度固定为40h(该40是16进制表示)。4行*16

第一项是字段的名称,第二项是字段的度量单位,第三项是字段的是数据内容,由于这里是介绍该结构用?表示,?前面的数字表示该字段的长度。有一个是4个长度的有一个是10个长度的。对于研究PE结构而言,该结构的定义中对我们有意义的字段只有最后一个(也就是红色的那一行),该字段的内容是一个长度为4个字节的地址,用于指向PE结构部分。

dosHeader->e_lfanew是DWORD类型,指出真正PE头相对于文件基地址的偏移值,即偏移多少个字节.

对于该字段在文件中如何查找,需要计算该字段E_lfanew的偏移(就是3Ch)。偏移的计算方法很简单,就是计算从结构头部到该字节的长度。下面我们来计算下这个字段的偏移。

E_lfanew字段前面共有18个字段,每个字段的单位都是word(也就是2个字节)长度有一个是4,一个是10,那么e_lfanew字段相对该结构首地址的偏移就是(可调用系统的计算器进行计算转换)(18-2+4+10)x2=60,转换成16进制就是3C,也可以利用一个更简单的方法来计算,该结构的长度为40, e_lfanew字段的长度为4,相减就得到了e_lfanew字段的偏移是3c。

由于该结构的各个字段都是固定的, e_lfanew字段的偏移在不同的PE文件中都是不变的。但不同的pe 文件该字段中的数据内容并不一定相同。 (也就是说不同文件的PE头结构的首地址不一定相同)

http://lwglucky.blog.51cto.com/1228348/283812

 待续....


推荐阅读
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 高效解决应用崩溃问题!友盟新版错误分析工具全面升级
    友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
author-avatar
爷_引领霸气
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有