PE文件头IGMAGE_NT_HEADERS

IMAGE_NT_HEADERS    Ctrl+滚轮可以放大图片

typedef struct _IMAGE_NT_HEADERS {
    DWORD Signature; //"PE00"
    IMAGE_FILE_HEADER FileHeader; //文件头包括了PE文件的基本信息
    IMAGE_OPTIONAL_HEADER32 OptionalHeader; //可选映射头,和IMAGE_FILE_HEADER文件头连起来就是一个完整"PE 文件头结构"
} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;


IMAGE_FILE_HEADER 

typedef struct _IMAGE_FILE_HEADER {
    WORD    Machine; //运行平台
    WORD    NumberOfSections; //section区块数目
    DWORD   TimeDateStamp; //文件创建时间
    DWORD   PointerToSymbolTable; //调试符号表地址
    DWORD   NumberOfSymbols; //调试符号表字节数
    WORD    SizeOfOptionalHeader; //可选头结构字节数   通过这一选项可以定位到IMAGE_SECTION_HEADER
    WORD    Characteristics; //文件属性
} IMAGE_FILE_HEADER32, *PIMAGE_FILE_HEADER32;






建议:PE文件结构书籍(1.段刚的加密与解密2.程序员的自我修养)和PE查看工具结合学习,不建议用LoadPE,Stud_PE和PE Tools等等

需要专业的PE工具可以加扣扣3346507173, 添加时备注PE工具

IMAGE_OPTIONAL_HEADER32

typedef struct _IMAGE_OPTIONAL_HEADER {
    WORD    Magic; //标志字(ROM映像或者可执行镜像)
    BYTE    MajorLinkerVersion; //链接程序的主版本号
    BYTE    MinorLinkerVersion; //链接程序的次版本号
    DWORD   SizeOfCode; //代码段大小
    DWORD   SizeOfInitializedData; //所有初始化数据区块的大小
    DWORD   SizeOfUninitializedData; //所有未初始化数据区块的大小
    DWORD   AddressOfEntryPoint; //程序入口地址
    DWORD   BaseOfCode; //代码区块起始RVA
    DWORD   BaseOfData; //数据区块起始RVA

    DWORD   ImageBase; //程序默认装入基地址
    DWORD   SectionAlignment; //内存区块对齐值
    DWORD   FileAlignment; //文件区块对齐值
    WORD    MajorOperatingSystemVersion; //操作系统主版本号
    WORD    MinorOperatingSystemVersion; //操作系统次版本号
    WORD    MajorImageVersion; //用户自定义主版本号
    WORD    MinorImageVersion; //用户自定义次版本号
    WORD    MajorSubsystemVersion; //所需要子系统主版本号
    WORD    MinorSubsystemVersion; //所需要子系统次版本号
    DWORD   Win32VersionValue; //预留
    DWORD   SizeOfImage; //映像装入内存总尺寸
    DWORD   SizeOfHeaders; //DOS头,PE头和区块表总大小
    DWORD   CheckSum; //映像校验和
    WORD    Subsystem; //文件子系统
    WORD    DllCharacteristics; //显示DLL特性的旗标
    DWORD   SizeOfStackReserve; //初始化预留栈大小
    DWORD   SizeOfStackCommit; //初始化实际提交栈大小
    DWORD   SizeOfHeapReserve; //初始化预留堆大小
    DWORD   SizeOfHeapCommit; //初始化实际提交堆大小
    DWORD   LoaderFlags; //与调试有关,默认为0
    DWORD   NumberOfRvaAndSizes; //数据目录表项目
    IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;


IMAGE_DATA_DIRECTORY 

数据目录表有16个IMAGE_DATA_DIRECTORY类型的数组组成
typedef struct _IMAGE_DATA_DIRECTORY {
    DWORD   VirtualAddress; //RVA相对虚拟地址
    DWORD   Size; //数据目录占用内存的字节数

} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;

数据目录表很重要,一般情况输出表(Export Directory RVA)指向Dll动态库输出的函数列表,OD动态分析和IDA Pro静态分析时需要用到

输入表(Import Directory)会被装载器重写,重写函数的地址是指向动态库的函数入口地址

资源表(Resource Directory)存放可执行的log,string,Title,Png等等,修改资源表可以汉化一些外国软件,修改log,免广告等等



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值