PE格式DOS,PE,OPTIONPE笔记

这里只列出需要重点记忆的,完整的需要用到再去查阅,加粗的就是非常重要的

基础概念

  1. 基地址ImageBase:PE文件载入内存后,内存中的版本称为模块(Module),起始地址称为模块句柄(hModule)也成基地址(ImageBase)
  2. 虚拟地址VA:PE被装入内存后,每个程序都有自己的虚拟空间,虚拟空间的内存地址称为虚拟地址(VA)
  3. 相对虚拟地址RVA:是PE文件载入地址的偏移位置(偏移量)
  4. 公式:虚拟地址VA=基地址ImageBase+相对虚拟地址RVA
    |DOS头|作用
    |–|--
    WORD e_magic| “MZ标记” 用于判断是否为可执行文件,值为0x5A4D
    DWORD e_lfanew|PE头相对于文件的偏移,用于定位PE文件,在文件开始偏移3CH处
标准PE头作用
WORD Machine程序运行的CPU型号:0x0 任何处理器/0x14C 386及后续处理器
WORD NumberOfSections文件中存在的节的总数,如果要新增节或者合并节 就要修改这个值
DWORD TimeDateStamp时间戳:文件的创建时间(和操作系统的创建时间无关),编译器填写的
WORD SizeOfOptionalHeader可选PE头的大小,32位PE文件默认E0h 64位PE文件默认为F0h 大小可以自定义*
WORD Characteristics每个位含义不同,根据每个位的0或者1共同组合一个16进制数
可选PE头作用
WORD **Magic**说明文件类型:10B 32位下的PE文件 20B 64位下的PE文件
DWORD SizeOfCode所有代码节的和,必须是FileAlignment的整数倍 编译器填的
DWORD SizeOfInitializedData已初始化数据大小的和,必须是FileAlignment的整数倍 编译器填的
DWORD SizeOfUninitializedData未初始化数据大小的和,必须是FileAlignment的整数倍 编译器填的
DWORD AddressOfEntryPoint程序入口
DWORD BaseOfCode代码开始的基址
DWORD BaseOfData数据开始的基址
DWORD ImageBase内存镜像基址
DWORD SectionAlignment*内存对齐,一般为1000h
DWORD FileAlignment文件对齐,以前老编译器为200H,现在一般为1000H
DWORD SizeOfImage内存中整个PE文件的映射的尺寸,可以比实际的值大,但必须是SectionAlignment的整数倍
DWORD SizeOfHeaders所有头+节表按照文件对齐后的大小,否则加载会出错
DWORD CheckSum校验和,看程序是否被修改过
DWORD SizeOfStackReserve初始化时保留的栈大小
DWORD SizeOfStackCommit实际提交的栈大小
DWORD SizeOfHeapReserve初始化保留的堆大小
DWORD SizeOfHeapCommit实际提交的堆大小
DWORD NumberOfRvaAndSizes目录项数目,现在一般是16,包括导入表,导出表,重定向表加在一起的数目
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值