[读书][笔记]WINDOWS PE权威指南《三》PE的原理和基础 之 第三章 PE文件头(下)

简介: [读书][笔记]WINDOWS PE权威指南《三》PE的原理和基础 之 第三章 PE文件头(下)

3.4.7 数据目录项——IMAGE_DATA_DIRECTORY

IMAGE OPTIONAL HEADER32(扩展PE头)结构的最后一个字段为DataDirectory。

该字段定义了PE文件中出现的所有不同类型的数据的目录信息

如前所述,应用程序中的数据被按照用途分成很多种类:

  • 导出表、
  • 导入表、
  • 资源、
  • 重定位表等。

在内存中,这些数据被操作系统以页为单位组织起来,并赋以不同的访问属性;

在文件中,这些数据也同样被组织起来,按照不同类别分别存放在文件的指定位置。

作用:该结构就是用来描述这些不同类别的数据在文件(和内存)中的位置及大小的,因为这个字段比较重要

从Windows NT3.1操作系统开始到现在,该数据目录中定义的数据类型一直是16种。

PE中使用了一种称作“数据目录项——IMAGE DATA DIRECTORY”的数据结构来定义每种数据。

该结构只有两个字段,结构具体定义如下:

Windows c++中:

typedef struct _IMAGE_DATA_DIRECTORY {
    DWORD   VirtualAddress;
    DWORD   Size;
} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;

两个字段依次为VirtualAddress和isize。

如图所示,总的数据目录一共由16个相同的IMAGE DATA DIRECTORY结构连续排列在一起组成。

在Windows头文件winnt.h中 属于拓展PE头结构体IMAGE_OPTIONAL_HEADER的成员DataDirectory

这16个元组的数组每一项均代表PE中的某一个类型的数据:

如果想在PE文件中寻找特定类型的数据,就需要从该结构开始。

比如:

要想查看PE中都调用了哪些动态链接库的函数?

则需要从数据目录表的第2个元素(数组编号为1)的IMAGE DATA DIRECTORY结构 获取导入表在文件中的起始位置和大小,然后再根据VirtualAddress地址指向的位置找到导入表相关的字节码。

这种信息组织方式正是本章最开始介绍的“头部+身体”的数据组织方式。

3.4.8 节表项——IMAGE_SECTION_HEADER

PE头IMAGE NT HEADERS后紧跟着节表。

它由许多个节表项(IMAGE SECTION HEADER)组成,每个节表项记录了PE中与某个特定的节有关的信息,如节的属性、节的大小、在文件和内存中的起始位置等。

节表中节的数量由字段IMAGE FILE HEADER, NumberOfSections来定义。节表项的数据结构详细定义如下:

Windows 头文件winnt.h中IMAGE_SECTION_HEADER结构体:

节表后面就是节的内容。截至节表,PE文件头部涉及的所有数据结构已经全部介绍完毕。

3.5 数据结构字段详解

参考于2010年9月21日发布的Microsoft Portable Executable and Common Object File Format Specification(Revision v8.2)

3.5.1 PE头——IMAGE_NT_HEADER的字段

1.IMAGE_NT_HEADER.Signature

2.IMAGE_NT_HEADER.FileHeader

3.IMAGE_NT_HEADER.OptionalHeader

3.5.2 标准PE头——IAMGE_FILE_HEADER的字段

4.IMAGE_FILE_HEADER.Machine

5 IMAGE_FILE_HEADER.NumberOfSections

6.IMAGE_FILE_HEADER.TimeDateStamp

7.IMAGE_FILE_HEADER.PointerToSymbolTable

8.IMAGE_FILE_HEADER.NumberOfSymbols

9.IMAGE_FILE_HEADER.SizeOfOptionalHeader

10.IMAGE FILE HEADER.Characteristics

3.5.3 扩展PE头——IMAGE_OPTIONAL_HEADER32的字段

11.IMAGE OPTIONAL HEADER32.Magic

12.IMAGE OPTIONAL HEADER32.MajorLinkerVersion

13.IMAGE OPTIONAL HEADER32.MinorLinkerVersion

14.IMAGE OPTIONAL HEADER32.SizeOfCode

15.IMAGE OPTIONAL HEADER32.SizeOflnitializedData

16.IMAGE_OPTIONAL_HEADER32.SizeOfUninitializedData

17.IMAGE OPTIONAL HEADER32.AddressOfEntryPoint

18.IMAGE OPTIONAL HEADER32.BaseOfCode

19.IMAGE OPTIONAL HEADER32.BaseOfData

20.IMAGE OPTIONAL HEADER32.ImageBase

21.IMAGE OPTIONAL_HEADER32.SectionAlignment

22.IMAGE OPTIONAL HEADER32.FileAlignment

23.IMAGE OPTIONAL HEADER32.MajorOperatingSystemVersion

24.IMAGE OPTIONAL HEADER32.MinorOperatingSystemVersion

25.IMAGE_OPTIONAL_HEADER32.MajorlmageVersion

26.IMAGE OPTIONAL HEADER32.MinorlmageVersion

27.IMAGE OPTIONAL HEADER32.MajorSubsystemVersion

28.IMAGE OPTIONAL HEADER32.MinorSubsystemVersion

29.IMAGE_OPTIONAL_HEADER32.Win32VersionValue

30.IMAGE OPTIONAL HEADER32.SizeOflmage

31.IMAGE OPTIONAL HEADER32.SizeOfHeaders

32.IMAGE OPTIONAL HEADER32.CheckSum

33.IMAGE OPTIONAL HEADER32.Subsystem

34.IMAGE OPTIONAL HEADER32.DlICharacteristics

35.IMAGE OPTIONAL HEADER32.SizeOfStackReserve

36.IMAGE OPTIONAL HEADER32.SizeOfStackCommit

37.IMAGE OPTIONAL HEADER32.SizeOfHeapReserve

38.IMAGE OPTIONAL HEADER32.SizeOfHeapCommit

39.IMAGE OPTIONAL HEADER32.LoaderFlags

40.IMAGE OPTIONAL HEADER32.NumberOfRvaAndSize

41.IMAGE OPTIONAL HEADER32.DataDirectory

3.5.4 数据目录项——IMAGE_DATA_DIRECTORY的字段

42.IMAGE DATA DIRECTORY.VirtualAddress

43.IMAGE DATA DIRECTORY.isize

3.5.5 节表项——IMAGE_SECTION_HEADER的字段

44.IMAGE SECTION HEADER.Name1

45.IMAGE SECTION HEADER.Misc

46.IMAGE SECTION HEADER.VirtualAddress

47.IMAGE SECTION HEADER.SizeOfRawData

48.IMAGE SECTION HEADER.PointerToRawData

49.IMAGE SECTION HEADER.PointerToRelocations

50.IMAGE SECTION HEADER.PointerToLinenumbers

51.IMAGE SECTION HEADER.NumberOfRelocations

52.IMAGE_SECTION_HEADER.NumberOfLinenumbers

53.IMAGE SECTION HEADER.Characteristics

3.5.6 解析HelloWorld程序的字节码

3.6 PE内存映像

3.7 PE文件头编程

3.7.1 RVA与FOA的转换

3.7.2 数据定位

3.7.3 标志位操作

3.7.4 PE校验和

3.8 总结


相关文章
|
安全 Windows
“由于启动计算机时出现了页面文件配置问题,Windows在你的计算机上创建了一个临时页面文件。。。”的问题解决
本文主要介绍了因清理电脑垃圾文件时误删虚拟内存导致的Windows页面文件配置问题,并提供了详细的解决步骤。问题表现为开机后出现临时页面文件创建的提示弹窗。解决方法包括通过控制面板或快捷键进入高级系统设置,进而调整虚拟内存设置:进入性能选项中的虚拟内存栏,选择自动管理所有驱动器的分页文件大小,最后确认并重启计算机以恢复正常运行。
9896 5
“由于启动计算机时出现了页面文件配置问题,Windows在你的计算机上创建了一个临时页面文件。。。”的问题解决
|
安全 API 数据安全/隐私保护
aipy实战:建设PE文件查杀神器,阻止Windows EXE木马!
本工具为小型木马静态特征查杀工具,专用于检测Windows下的EXE文件是否为可疑木马。核心功能包括:扫描恶意字符串(如keylogger、powershell)、检查熵值异常以判断加密/加壳、揪出可疑API组合(如注册表篡改、网络通信链)以及解析PE头分析编译环境与加壳痕迹。通过提示词实现功能开发,并保存为`aipy_kill_rat.py`文件。测试结果显示,工具成功扫描出426个可疑字符串、超高熵值及恶意API组合,确认目标文件为恶意木马。该工具轻量灵活,适合样本初筛与应急响应,是静态分析的高效利器。
|
Web App开发 人工智能 JSON
Windows版来啦!Qwen3+MCPs,用AI自动发布小红书图文/视频笔记!
上一篇用 Qwen3+MCPs实现AI自动发小红书的最佳实践 有超多小伙伴关注,同时也排队在蹲Windows版本的教程。
2287 1
|
安全 前端开发 Windows
Windows Electron 应用更新的原理是什么?揭秘 NsisUpdater
本文介绍了 Electron 应用在 Windows 中的更新原理,重点分析了 `NsisUpdater` 类的实现。该类利用 NSIS 脚本,通过初始化、检查更新、下载更新、验证签名和安装更新等步骤,确保应用的更新过程安全可靠。核心功能包括差异下载、签名验证和管理员权限处理,确保更新高效且安全。
668 4
Windows Electron 应用更新的原理是什么?揭秘 NsisUpdater
|
监控 Ubuntu Linux
视频监控笔记(五):Ubuntu和windows时区同步问题-your clock is behind
这篇文章介绍了如何在Ubuntu和Windows系统中通过设置相同的时区并使用ntp服务来解决时间同步问题。
562 4
视频监控笔记(五):Ubuntu和windows时区同步问题-your clock is behind
|
存储 开发框架 .NET
Windows IIS中asp的global.asa全局配置文件使用说明
Windows IIS中asp的global.asa全局配置文件使用说明
437 1
|
Java Windows
如何在windows上运行jar包/JAR文件 如何在cmd上运行 jar包 保姆级教程 超详细
本文提供了一个详细的教程,解释了如何在Windows操作系统的命令提示符(cmd)中运行JAR文件。
12757 1
|
存储 安全 程序员
Windows任务管理器开发原理与实现
Windows任务管理器开发原理与实现
|
API Windows
Windows之窗口原理
这篇文章主要介绍了Windows窗口原理和如何使用Windows API创建和管理窗口。
370 0
|
程序员 Windows
程序员必备文件搜索工具 Everything 带安装包!!! 比windows自带的文件搜索快几百倍!!! 超级好用的文件搜索工具,仅几兆,不占内存,打开即用
文章推荐了程序员必备的文件搜索工具Everything,并提供了安装包下载链接,强调其比Windows自带搜索快且占用内存少。
489 0