PE文件结构学习笔记

来源:互联网 发布:皇图龙源进阶数据 编辑:程序博客网 时间:2024/05/16 18:10

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     节的属性
    }

详见 罗云彬的书

原创粉丝点击