您的位置:首页 > 其它

PE文件结构学习笔记

2011-05-05 22:07 295 查看
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 节的属性

}

详见 罗云彬的书
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: