《Windows PE》2.1 初识PE文件

news2024/12/24 2:56:37

Windows PE文件(Portable Executable file)是一种可执行文件格式,用于Windows操作系统中的可执行程序、动态链接库(DLL)和驱动程序等。它是一种规范化的文件格式,定义了文件的结构和组织方式,以便操作系统能够正确加载和执行这些文件。

本节必须掌握的知识点:

        PE文件特征和组成

        初识PE文件

2.1.1 PE文件特征和组成

图2-1 PE结构划分

如图2-1所示,Windows PE文件的主要特征和组成部分包括:

DOS

DOS头由两部分组成:

●DOS MZ头(DOS Header): 这是一个用于兼容DOS环境的头部,包含了DOS程序的执行入口和其他相关信息。

●DOS块(DOS Stub):DOS驻留程序。是Windows可执行文件(PE文件)中的一个特殊部分,位于文件头之后、PE头之前的位置。它是为了兼容DOS环境而保留的一个小段程序代码,用于在DOS环境下执行一些简单的操作或显示一些特定信息。

PE

PE头由3部分组成:

●PE头标识(Signature):即“50 45 00 00”4个字节二进制数,为“PE\0\0”的ASCII码字符,用于标识该文件为PE文件。

●PE文件头(PE Header): 这是PE文件的主要头部,包含了PE文件的标识和一些基本信息,如机器类型、节表(Section Table)的位置和大小等。

●PE扩展头(OptionalHeader):位于PE文件头(PE Header)之后的一个可选部分,用于存储一些额外的信息和数据。扩展头的存在取决于PE文件的特定配置和需要。扩展头包括扩展头(Optional Header)和数据目录表(Data Directory Table)。

其中数据目录表中包含了16个数据目录项:

1.导入表(Import Table)和导出表(Export Table): 这些表用于描述PE文件中的导入和导出函数。导入表记录了PE文件所依赖的外部函数和库,而导出表记录了PE文件中自己提供给其他模块使用的函数。

2.重定位表(Relocation Table): 当PE文件被加载到内存中时,由于地址空间的不同,可能需要对其中的地址进行重定位。重定位表记录了需要进行地址重定位的位置和相关信息。

3.资源表(Resource Table): 资源表包含了PE文件中的资源,如图标、位图、字符串等。它们可以被应用程序或操作系统使用。

4.IAT表(Import Address Table)是Windows可执行文件中的一个重要数据结构,用于存储程序所依赖的外部函数的地址。它是在链接和加载过程中由操作系统动态填充的。

5.其他数据部分(Data Sections): PE文件还包括一些其他数据部分,如调试信息、TLS(Thread Local Storage)初始化数据等。

DOS头和PE头构成了PE文件的头部。接下来就是PE文件的数据部分。

PE数据区

PE数据区包含节表和节区内容两个部分组成。每个具体PE文件中节区的数量是不同的。

●节表(Section Table): 节表定义了PE文件中各个节(Section)的位置、大小和属性等信息。每个节都对应着PE文件中的一个逻辑部分,如代码节、数据节、资源节等。

●节内容:节表以下的部分就是各个节区的具体内容了,如.text、.rdata、.data节区等。

Windows PE文件格式是Windows操作系统的核心之一,了解它的结构和使用方式对于开发和分析Windows应用程序和驱动程序非常重要。

【注意】 PE文件格式的细节和特性可能会因不同的Windows版本和编译器而有所差异。

2.1.2 初识PE文件

我们借助WinHex工具来初步认识一下一个简单的PE文件HelloWorld.exe。

实验一:静态分析32位PE文件

我们将32位程序HelloWorld.exe拖入WinHex,如图1-2所示:

图2-2 初识PE文件

图1-2清晰的显示了一个真实的、在磁盘上的PE文件的基本结构。一个PE文件可以划分为DOS头、DOS块、PE头、节表和节区几个大区块。

每个PE文件的DOS头的大小都是64个字节,都具有“4D5A”两个字节的DOS头特征字符“MZ”。而DOS块的大小却是可变的。

每个PE文件都有PE 文件标识“PE\0\0”,即0x00004550。PE头的大小也同样是可变的。通常绝大多数32位PE文件的PE头的大小是相同的,为248字节。而64位PE文件的PE头大小为264个字节。在一些特例中,有可能会人为的修改扩展头的大小。

每个PE文件节表的大小和节区的大小都有可能不相同。每个节表项都对应一个节区。在图2-2中,HelloWorld.exe包含.text、.rdata和.data 3个节区,分别对应3个节区。

实验二:静态分析64位PE文件

将64位程序notepad64.exe拖入WinHex,如图2-3所示:

图2-3 64位PE静态分析

64位PE文件格式与32位PE文件格式几乎相同,同样包含DOS头、DOS块、PE头、节表和节区。也同样包含”MZ”和”PE/0/0”特征。如果仔细观察就会发现,64位PE文件的PE头的大小为264个字节,而32位PE文件的PE头大小为248个字节。我们将在下一章详细讲解具体的区别。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2062030.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

go设计模式———抽象工厂模式

抽象工厂模式概念 抽象工厂模式是一种设计模式,它允许创建一系列相关的对象,而无需指定具体的类。具体来说,抽象工厂定义了用于创建不同产品的接口,但实际的创建工作则由具体的工厂类完成。每个具体工厂负责创建一组相关的产品&am…

谷歌账号停用后申诉了,也收到了谷歌的邮件,如何判断谷歌申诉是否成功,成功了怎么办?被拒绝谷歌账号就废了吗?

似乎是谷歌分工机制的更新,最近谷歌账号“被停用”的情况貌似多了起来,许多朋友在谷歌账号提示活动异常,要输入手机号码恢复账号的时候,无论是否立刻恢复,很快好像就迎来了“您的账号已停用”的结果。或者有一些朋友许…

多元统计分析——基于R语言的单车使用情况可视化分析

注:基于R语言的单车使用情况可视化分析为实验记录,存在不足,自行改进。 一、提出问题(要解决或分析的问题) 1 、用户对共享单车的使用习惯,环境对共享单车运营带来的影响? 2 、共享单车的租赁…

【北京仁爱堂】痉挛性斜颈的健康指导

痉挛性斜颈是一种肌肉紧张异常症,仅限于颈部肌肉的肌张力障碍。当患者患有痉挛性斜颈,会表现为颈部肌肉间歇性或持续不规则的收缩,因此患者的头颈部会出现扭曲、歪斜、姿势异常等症状,多发于30-40岁左右中年人 一、 痉挛性斜颈的5…

mac和windows上安装nvm管理node版本

NVM 是 node version manager 的缩写,它是一个用来管理电脑上 node 版本的命令行工具,在日常前端开发中是一个跟 node 一样会经常用到的工具,可以很方便的让我们快速切换不同的node版本。 mac 上安装 nvm 1、下载安装 nvm 下载安装可以直…

【机器学习】逻辑回归原理(极大似然估计,逻辑函数Sigmod函数模型详解!!!)

目录 🍔 逻辑回归应用场景 🍔 极大似然估计 2.1 为什么要有极大似然估计? 2.2 极大似然估计步骤 2.3 极大似然估计的例子 🍔 Sigmod函数模型 3.1 逻辑斯特函数的由来 3.2 Sigmod函数绘图 3.3 进一步探究-加入线性回归 3…

【爬虫】 使用AI编写B站爬虫代码

记录一次,自己不写一行代码,所有的代码全由AI编写的过程。 本次使用的AI工具为:Claude 其他AI工具同理。 首先,观察哔哩哔哩网页的结构,定位到了包含视频信息的关键元素。右键检查或打开F12,找到最左侧的这…

2024前端面试题-js篇

1.js有哪些数据类型 基础数据类型:string,number,boolean,null,undefined,bigInt,symbol 引用数据类型:Object 2.js检测数据类型的方式 typeof:其中数组、对象、null都会被判断为object&…

基于WebSocket打造的一款SSH客户端

引用:Java打造一款SSH客户端,而且已开源_java ssh客户端-CSDN博客 由于原作者是放在Github上,不方便下载,所以下载下来,转存到码云上,地址:https://gitee.com/lfw1024/web-ssh 为了满足一些小白…

计算机毕业设计选题推荐-股票数据可视化分析与预测-Python爬虫

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Windows10拿到shell后远程登录

一、准备工作 kali机:192.168.19.130 win10:192.168.19.133 主机:192.168.1.73(自己操作可以在kali上,我这是因为反弹的shell在主机上) 二、开启远程登录 1.win10上关闭实时保护,并且运行了…

[C++] C++11详解 (一)

标题:[C] C11详解 (一) 水墨不写bug 目录 前言 一、列表初始化 二、STL的初始化列表(initializer_list —— Cplusplus.com) 三、声明方式(auto、decltype、nullptr) 1.auto ​编辑 2.decltype 正文开始&#x…

Spark环境搭建-Local

目录 Local下的角色分布: Anaconda On Linux 安装 (单台服务器) 1.下载安装 2.国内源 下载Spark安装包 1.下载 2.解压 3.环境变量 测试 监控 Local下的角色分布: 资源管理: Master:Local进程本身 Worker:L…

UE5.4 - 编辑器页面和概念术语

目录 一. 打开新项目 二. 主页面 1.菜单栏 2.工具栏 3.视口 4.内容侧滑菜单/内容浏览器 5.底部工具栏 6.大纲 7.细节面板 三. 虚幻引擎术语 四. 进一步的术语 五. 总结 一. 打开新项目 选择 虚幻引擎 -> 库 -> 启动 选择类型,选择示例的项目,可以把这些都选选…

探索WebSocket在ASP.NET Core中的实时通信应用与实现策略

文章目录 前言一、创建 ASP.NET Core 项目二、配置中间件以支持 WebSocket1.启动类Program.cs2.WebSocket连接管理器3.WebSocket事件管理器4.WebSocket连接入口 三、客户端实现总结 前言 在 ASP.NET Core 中集成 WebSocket 是一种实现实时通信的有效方式。WebSocket 提供了一个…

什么是TCP三次握手和四次挥手,TCP协议详细解析!零基础入门到精通,收藏这一篇就够了

TCP是TCP/IP协议族中一个最核心的协议,它向下使用网络层IP协议,向上为应用层HTTP、FTP、SMTP、POP3、SSH、Telnet等协议提供支持。本文给出TCP报文格式的详细说明,介绍网络数据包传递中如何进行地址解析、建立TCP连接的三次握手过程以及断开T…

【docker】使用github action来自动发布项目到dockerhub

本文首发于 ❄️慕雪的寒舍 使用github action来自动发布项目到dockerhub。参考 https://msdemt.github.io/p/github-action-build-docker/ 博客 1.准备工作 1.1 dockerhub token https://hub.docker.com/settings/security 登录dockerhub,在用户的account settin…

【具体数学 Concrete Mathematics】1.1 递归问题 讲义

【具体数学 Concrete Mathematics】1.1 递归问题 导入 本节(1.1、1.1.1-1.1.3)主要围绕《具体数学》第一章 递归问题(Recurrent Problems)讲义部分的三个问题展开,分别是汉诺塔、平面上的直线以及约瑟夫问题。下面简单介绍一下递归问题和数学…

复数的处理

复数的处理 复数 V V V 定义为在 ( x , y ) (x,y) (x,y)-平面中实数对的有序集合。在这方面,复数可以被视为原点 ( 0 , 0 ) (0,0) (0,0) 上的向量。从这个角度看,复数的加法类似于 ( x , y ) (x,y) (x,y)-平面中向量的加法。 然而,乘法…

Vue3 国际化i18n语言库 网站多语言切换

介绍 在 Vue 3 项目中,国际化(i18n)是一个常见的需求,它允许你的应用支持多种语言,并根据用户的语言偏好显示相应的内容。为了实现国际化,你可以使用 vue-i18n 这个库,它是 Vue 官方推荐的国际…