pe文件结构学习笔记
一个pe文件的大致结构:
DOS头
PE头
节表
节
相关结构体:
IMAGE_DOS_HEADER
{
e_magic WORD 'MZ'
...
e_lfanew DWORD 指向PE文件头
}
IMAGE_NT_HEADER
{
'PE'
IMAGE_FILE_HEADER
{
Machine WORD 运行的硬件平台(CPU Intel386等等)
NumberOfSection WORD 文件的节数目
TimeDateStamp DWORD 创建日期
SizeOfOptionalHeader WORD 结构体大小
Characteristlics WORD 文件属性
}
IMAGE_OPTIONAL_HEADER
{
AddressOfEntryPoint 文件执行时入口地址
ImageBase 文件优先装入地址
SectionAlignment 节被装入内存后对齐单元
FileAlignment 节存储在磁盘文件中时的对齐单位
Subsystem 使用界面的子系统CUI OR GUI
DataDirectory 放16个IMAGE_DATA_DIRECTORY结构
}
}
后边是16个节表
IMAGE_DATA_DIRECTORY
{
VirtualAddress DWORD 数据起始虚拟地址 RVA
iSize DWORD 数据块长度
}
0 导出表 IMAGE_DIRECTORY_ENTRY_EXPORT
1 导入表 IMAGE_DIRECTORY_ENTRY_IMPORT
2 资源 IMAGE_DIRECTORY_ENTRY_RESOURCE
3 异常
4 安全
5 重定位表IMAGE_DIRECTORY_ENTRY_BASERELOC
6 调试信息IMAGE_DIRECTORY_ENTRY_DEBUG
7 版权信息IMAGE_DIRECTORY_ENTRY_ARCHITECTURE
8 不详
9 ThreadLocal Storage
10 不详
11 不详
12 导出函数地址IMAGE_DIRECTORY_ENTRY_IAT
13 不详
14 不详
15 未使用
Windows加载DOS, PE头, 节表部分不进行任何处理, 原封不动映射到内存, 但是加载节的时候要经过一些
处理
PE中所有节的属性被定义在节表中
节表的结构(每个节表结构体描述一个节):
IMAGE_SECTION_HEADER
{
Name1 8个字节的节名
union {
PhysicalAddress
VirtualSize 节区的尺寸
}
VirtualAddress 节区的RVA地址
SizeOfRawData 在文件中对齐后的尺寸
....
Characteristics 节的属性
}
详见 罗云彬的书
PE文件结构学习笔记
最新推荐文章于 2022-10-30 14:31:00 发布