PE文件结构学习笔记

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

详见 罗云彬的书

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值