[re入门]PE文件结构(上)

简介: [re入门]PE文件结构

PE文件结构分析

image.png

基本概念

  • 认识PE文件
    PE文件的全称是Portable Executable,意为可移植的可执行的文件,常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL)。


EXE和DLL文件之间的区别完全是语义上的,他们使用完全相同的PE格式。唯一的区别就是用一个字段标识出这个文件是EXE还是DLL。还有许多DLL的扩展,如OCX控件和控制面板程序(.CPL文件)等都是DLL,它们有一样的实体。

64位的Windows只是对PE格式做了一些简单的修饰,新格式叫PE32+。没有新的结构加进去,其余的改变只是简单地将以前的32位字段扩展成64位。对于C++代码,Windows文件头的配置使其拥有不明显的区别。

整体结构

PE结构一般来说:从起始位置开始依次是DOS头、NT头、节表以及具体的节。

基地址

程序加载进内存的起始地址。

当PE文件通过Windows加载器被装入内存后,内存中的版本被称作模块(Module)。映射文件的起始地址被称为模块句柄(hModule),可以通过模块句柄访问内存中其他的数据结构。这个初始内存地址也称为基地址(ImageBase)。我们可以通过Pchunter工具查看程序基地址。

相对虚拟地址

又称作RVA,它是一个“相对”地址,或称为“偏移量”。存中的一个简单的相对于PE文件装入地址的偏移位置。顺便说一下,在PE用语里,实际的内存地址被称作虚拟地址(Virtual Address,简称VA),另外也可以把虚拟地址想象为加上首选装入地址的RVA。不要忘了前面提到的装入地址等同于模块句柄。它们之间的关系如下:

虚拟地址(VA)=基地址(ImageBase)+相对虚拟地址(RVA)

1.png

1.png

相关文章
|
3月前
|
Windows
pe_xscan做了几个改动
pe_xscan做了几个改动
|
Linux Windows
PE格式:实现ELF结构解析工具
ELF文件格式,是一个开放的可执行文件和链接文件格式,其主要工作在Linux系统上,是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件,ELF文件格式类似于PE格式,但比起PE结构来ELF结构显得更加的简单,Linux文件结构相比于Windows结构来说简单一些.
249 0
|
存储 安全 数据管理
[读书][笔记]WINDOWS PE权威指南《三》PE的原理和基础 之 第三章 PE文件头(上)
[读书][笔记]WINDOWS PE权威指南《三》PE的原理和基础 之 第三章 PE文件头
|
程序员 Windows
[读书][笔记]WINDOWS PE权威指南《三》PE的原理和基础 之 第三章 PE文件头(中)
[读书][笔记]WINDOWS PE权威指南《三》PE的原理和基础 之 第三章 PE文件头(中)
106 0
|
C++ Windows
[读书][笔记]WINDOWS PE权威指南《三》PE的原理和基础 之 第三章 PE文件头(下)
[读书][笔记]WINDOWS PE权威指南《三》PE的原理和基础 之 第三章 PE文件头(下)
107 0
|
存储 Windows
2.4 PE结构:节表详细解析
节表(Section Table)是Windows PE/COFF格式的可执行文件中一个非常重要的数据结构,它记录了各个代码段、数据段、资源段、重定向表等在文件中的位置和大小信息,是操作系统加载文件时根据节表来进行各个段的映射和初始化的重要依据。节表中的每个记录则被称为`IMAGE_SECTION_HEADER`,它记录了一个段的各种属性信息和在文件中的位置和大小等信息,一个文件可以由多个`IMAGE_SECTION_HEADER`构成。
186 0
2.4 PE结构:节表详细解析
|
安全 数据安全/隐私保护 Windows
[读书][笔记]WINDOWS PE权威指南《零》PE基础
[读书][笔记]WINDOWS PE权威指南《零》PE基础
|
存储 Windows
驱动开发:内核解析PE结构导出表
在笔者的上一篇文章`《驱动开发:内核特征码扫描PE代码段》`中`LyShark`带大家通过封装好的`LySharkToolsUtilKernelBase`函数实现了动态获取内核模块基址,并通过`ntimage.h`头文件中提供的系列函数解析了指定内核模块的`PE节表`参数,本章将继续延申这个话题,实现对PE文件导出表的解析任务,导出表无法动态获取,解析导出表则必须读入内核模块到内存才可继续解析,所以我们需要分两步走,首先读入内核磁盘文件到内存,然后再通过`ntimage.h`中的系列函数解析即可。
239 0
|
C语言 Windows
驱动开发:内核解析PE结构节表
在笔者上一篇文章`《驱动开发:内核解析PE结构导出表》`介绍了如何解析内存导出表结构,本章将继续延申实现解析PE结构的PE头,PE节表等数据,总体而言内核中解析PE结构与应用层没什么不同,在上一篇文章中`LyShark`封装实现了`KernelMapFile()`内存映射函数,在之后的章节中这个函数会被多次用到,为了减少代码冗余,后期文章只列出重要部分,读者可以自行去前面的文章中寻找特定的片段。
201 0
|
存储 Unix 程序员
PE文件格式
PE文件基本内容
179 0
PE文件格式