PE文件解析
来源:互联网 发布:办公室新装修 知乎 编辑:程序博客网 时间:2024/06/05 06:12
MS-DOS头:64字节数据,最后四个字节为e_lfanew,代表PE头距离文件头的距离。
PE文件头:
Signiture: 4字节PE文件标识, PE00
IMAGE_FILE_HEADER: 20字节映像文件头,第16、17字节定义了IMAGE_OPTIONAL_HEADER的大小
IMAGE_OPTIONAL_HEADER: 该结构非固定大小,但一般为0xE0 (224)字节;主要定义了PE文件更为详尽的属性字段。其结构如下:
01.
typedef
struct
_IMAGE_OPTIONAL_HEADER {
02.
//
03.
// Standard fields.
04.
//
05.
06.
00h
WORD
Magic;
//幻数,32位pe文件总为010bh
07.
02h
BYTE
MajorLinkerVersion;
//连接器主版本号
08.
03h
BYTE
MinorLinkerVersion;
//连接器副版本号
09.
04h
DWORD
SizeOfCode;
//代码段总大小
10.
08h
DWORD
SizeOfInitializedData;
//已初始化数据段总大小
11.
0ch
DWORD
SizeOfUninitializedData;
//未初始化数据段总大小
12.
10h
DWORD
AddressOfEntryPoint;
//程序执行入口地址(RVA)
13.
14h
DWORD
BaseOfCode;
//代码段起始地址(RVA)
14.
18h
DWORD
BaseOfData;
//数据段起始地址(RVA)
15.
16.
//
17.
// NT additional fields.
18.
//
19.
20.
1ch
DWORD
ImageBase;
//程序默认的装入起始地址
21.
20h
DWORD
SectionAlignment;
//内存中区块的对齐单位
22.
24h
DWORD
FileAlignment;
//文件中区块的对齐单位
23.
28h
WORD
MajorOperatingSystemVersion;
//所需操作系统主版本号
24.
2ah
WORD
MinorOperatingSystemVersion;
//所需操作系统副版本号
25.
2ch
WORD
MajorImageVersion;
//自定义主版本号
26.
2eh
WORD
MinorImageVersion;
//自定义副版本号
27.
30h
WORD
MajorSubsystemVersion;
//所需子系统主版本号
28.
32h
WORD
MinorSubsystemVersion;
//所需子系统副版本号
29.
34h
DWORD
Win32VersionValue;
//总是0
30.
38h
DWORD
SizeOfImage;
//pe文件在内存中的映像总大小
31.
3ch
DWORD
SizeOfHeaders;
//从pe文件开始到节表(包含节表)的总大小
32.
40h
DWORD
CheckSum;
//pe文件CRC校验和
33.
44h
WORD
Subsystem;
//用户界面使用的子系统类型
34.
46h
WORD
DllCharacteristics;
//为0
35.
48h
DWORD
SizeOfStackReserve;
//为线程的栈初始保留的虚拟内存的默认值
36.
4ch
DWORD
SizeOfStackCommit;
//为线程的栈初始提交的虚拟内存的大小
37.
50h
DWORD
SizeOfHeapReserve;
//为进程的堆保留的虚拟内存的大小
38.
54h
DWORD
SizeOfHeapCommit;
//为进程的堆初始提交的虚拟内存的大小
39.
58h
DWORD
LoaderFlags;
//为0
40.
5ch
DWORD
NumberOfRvaAndSizes;
//数据目录结构数组的项数,总为 00000010h
41.
60h IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
//数据目录结构数组
42.
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
数据目录表,标识数据块的起始RVA地址和数据块长度。一般为16个该结构组成。其结构如下
1.
typedef
struct
_IMAGE_DATA_DIRECTORY {
2.
DWORD
VirtualAddress;
// 相对虚拟地址
3.
DWORD
Size;
//大小
4.
} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;
该表距离PE头,0x78 == 120字节。
区段表:区段名、区段加载到内存的起始地址、大小等信息(一个结构体为40个字节)。其结构如下:
typedef struct _IMAGE_SECTION_HEADER{
} IMAGE_SECTION_HEADER,*PIMAGE_SECTION_HEADER;
- Python解析PE文件
- PE文件解析
- PE文件结构解析
- PE文件结构解析
- PE文件解析代码
- PE文件解析(C#)
- Ruby解析Windows PE文件
- pe文件解析:读取pe信息获取文件资源
- PE文件详解1——PE文件头部解析
- PE总结9 --PE文件结构之 解析导出表
- PE总结11--PE文件结构之 解析导入表
- PE总结13 --PE文件结构之 解析资源表
- PE总结15--PE文件结构之 解析资源表
- 编码实现PE文件解析(C源代码)
- 解析PE文件的附加数据
- 编写PE文件解析器(二)
- 编写PE文件解析器(三)
- 编写PE文件解析器(一)
- java读取文件的两种方法:java.io和java.lang.ClassLoader
- 从头开始安装Ubuntu,cuda,cudnn,caffe,tensorflow,ROS
- 简单问题
- 剑指Offer patitionArray
- 机器学习系列-------机器学习路线图(附资料)
- PE文件解析
- LeetCode题解:Kth Smallest Element in a BST
- hdu 1213 How Many Tables
- 利用SE16n 修改数据
- Pixhawk之前期准备
- spark , NoSuchMethodError: ConcurrentHashMap.keySet 和failed to connect to master的错
- 蓝桥杯 字符串转整数
- 二叉查找树
- Notepad++开发JavaScript运行时中文出现乱码的解决方法