查看: 631|回复: 0

[原创图文] PE图文教程-3.完善可选头

[复制链接]
发表于 2019-8-17 22:13:20 | 显示全部楼层 |阅读模式
上一节课中我写好了_IMAGE_OPTIONAL_HEADER头的前10个成员,今天我接着来完善这个结构中最重要的两个成员,在学习第11个第12个成员之前我们先来认识一下PE磁盘文件与内存映像结构图。
264835d580b0c1c123.png
做一个RVAtoRAW的转换练习(根据上节课讲的转换公式)
896435d580b165980a.png
RVA: (Relative Virtual Address 简称RVA),RVA只是内存中的一个简单的相对于PE文件装入地址的偏移位置,或称为偏移量。公式:  目标地址 401000h ---装入地址(Imagebase) 400000h=RVA 1000h
VA:PE用语里,实际的内存地址被称作虚拟地址(Virtual Address )简称VA。即OD里面能看到的地址   公式: 虚拟地址 VA =装入地址(Imagebase) + 相对虚拟地址(RVA)
File Offset:PE文件存储在磁盘上时,某个数据的位置相对于文件头的偏移量,称为文件地址。即C32里面能看到的地址  公式:
文件偏移-文件中节区的起始位置=内存偏移-内存中节区的起始位置

文件偏移=内存偏移-内存中节区的起始位置+文件中节区的起始位置
894175d580b2628ce7.png

8185d580b2bf1e9e.png
PELord也提供了偏移转换的专用计算器(非常强大)
952315d580b37f2eb5.png
进入正题:
407665d580b43851cd.png
上一节课中我们讲解了_IMAGE_OPTIONAL_HEADER 头的前10个成员,有了刚才的基础后,我们来看一下接下来的第11个第12个成员。
       成员114个字节,表示段加载后在内存中的对齐方式。内存中节对齐的粒度。例如,如果该值是4096 (1000h),那么每节的起始地址必须是4096的倍数。若第一节从401000h开始且大小是10个字节,则下一节必定从402000h开始,
  即使401000h402000h之间还有很多空间没被使用。因为Windows管理内存采用分页管理的方式,而每页的大小为4k,也就是1000h,所以我们这个值为”00100000
      成员124个字节,表示段在文件中的对齐方式。文件中节对齐的粒度。例如,如果该值是(200h),,那么每节的起始地址必须是512的倍数。若第一节从文件偏移量200h开始且大小是10个字节,则下一节必定位于偏移量400h: 即使偏移
  5121024之间还有很多空间没被使用。此值最好设为200h,所以该成员的值为“00020000

在文件中把这两个成员完善
771815d580b53a7fd5.png

课件打包:
第三课 完善可选头.zip (601.09 KB, 下载次数: 0)
温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的最好奖励,还可以获得学币奖励,请尊重作者的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
论坛交流群:672619046
快速回复 返回顶部 返回列表