参考:

https://zhuanlan.zhihu.com/p/47075612

https://docs.microsoft.com/zh-cn/windows/win32/debug/pe-format

<加密与解密 第4版>

<Windows PE 权威指南>

文章目录

  • PE 基础
    • 概念
    • 装载PE文件
    • PE组成
  • PE文件头结构
    • PE头 IMAGE_NT_HEADERS
    • 扩展PE头/可选头(IMAGE_OPTIONAL_HEADER32)
    • 数据目录项 (IMAGE_DATA_DIRECTORY)
  • PE文件地址与VA(virtualAddress)之间的转换。
    • 虚拟内存
      • 虚拟内存地址、装载基址、相对虚拟地址之间的关系:
    • 节偏移
      • 文件偏移地址、虚拟内存地址、装载基址、相对虚拟地址和节偏移之间的关系:
    • 入口点(OEP)
  • PE 文件磁盘与内存映像
  • 总结

PE 基础

概念

PE文件是windows系统中遵循PE结构的文件,比如以.exe .dll为后缀名的文件以及系统驱动文件sys。

具体PE文件类型:

可执行系列:EXE,SCR;
驱动程序系列:SYS,VXD;
库系列:DLL,OCX,CPL,DRV;
对象文件系列:OBJ;

装载PE文件

https://blog.csdn.net/benny5609/article/details/1788067
装载一PE文件的主要步骤:

  • 当PE文件被执行,PE装载器检查 DOS MZ header 里的 PE header 偏移量。如果找到,则跳转到 PE header。
  • PE装载器检查 PE header 的有效性。如果有效,就跳转到PE header的尾部。
  • 紧跟 PE header 的是节表。PE装载器读取其中的节信息,并采用文件映射方法将这些节映射到内存,同时付上节表里指定的节属性。
  • PE文件映射入内存后,PE装载器将处理PE文件中类似 import table(引入表)逻辑部分

PE组成

PE文件大体分为两部分:

头 (包括下图中的DOS头,PE文件头,块表 Section Table)
主体 ( 块Section)。

Section又被翻译为节 故有节表 节体叫法.

PE文件头结构

PE文件头结构

PE头 IMAGE_NT_HEADERS

扩展PE头/可选头(IMAGE_OPTIONAL_HEADER32)

数据目录项 (IMAGE_DATA_DIRECTORY)

组成:

  • 导出表、
  • 导入表、
  • 资源表、
  • 异常处理表、
  • 安全表、(Certificate Table)
  • 重定位表、
  • 调试表、
  • 版权、
  • 指针目录、
  • TLS、
  • 载入配置、
  • 绑定输入目录、
  • 导入地址表、
  • 延迟载入、
  • COM信息。

PE文件地址与VA(virtualAddress)之间的转换。

虚拟内存

文件偏移地址(File Offset Address) :文件相对于文件开头的偏移

装载基址(Image Base) :PE装入内存时的基地址,EXE在内存中的基地址是0x00400000,DLL的基地址是0x10000000,这些位置可以通过修改编译选项更改

虚拟内存地址 (Virtual Address, VA) :PE文件中的指令被装入内存后的地址,在Windows系统中,PE文件被系统加载器映射到内存中。每个程序都有自己的虚拟空间,这个虚拟空间的内存地址称为虚拟地址(Virtual Address,VA)。

相对虚拟地址(Relative Virtual Address,RVA) :相对虚拟地址是内存地址相对于映射基地址偏移量

虚拟内存地址、装载基址、相对虚拟地址之间的关系:

VA= Image base+ RVA

节偏移

节偏移 :PE文件中的数据按照磁盘数据标准存放,以0x200字节为基本单位进行组织,当PE文件装载到内存时,将按照内存数据标准存放,以0x1000字节为基本单位,所以文件偏移地址和相对虚拟内存会有细微的差别,这种差别称为节偏移

SectionAlignment : 内存当中的块对齐数,一般为0x1000。

FileAlignment :磁盘当中块对齐数,一般为0x200。

文件偏移地址、虚拟内存地址、装载基址、相对虚拟地址和节偏移之间的关系:

文件偏移地址 = 虚拟内存地址(VA)- 装载基址(ImageBase)- 节偏移
= RVA –节偏移

入口点(OEP)

入口点(Original Entry Point) : 首先明确一个概念就是OEP是一个RVA,然后使用OEP +Imagebase ==入口点的VA,通常情况下,OEP指向的不是main函数。

PE 文件磁盘与内存映像

PE文件不是作为单一内存映射文件,被载人内存是很重要的。Windows加载器(又称PE装载器)遍历PE文件并决定文件的哪一部分被映射,这种映射方式是将文件较高的偏移位置映射到较高的内存地址中。磁盘文件一旦被载入内存,磁盘上的数据结构布局和内存中的数据结构布局就是一致的。

当PE文件通过Windows加载器载人内存后,PE在内存中的版本称为模块(Module)。
映射文件的起始地址称为模块句柄(hModule),可以通过模块句柄访问内存中的其他数据结构。这个初始内存地址也称为基地址(ImageBase)。

总结

[读书][笔记]WINDOWS PE权威指南《零》PE基础相关推荐

  1. 读书笔记--Android Gradle权威指南(上)

    本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 最近看了一本书<Android Gradle 权威指南>,对于 Gradle 理解又更深了,但不想过段时间就又忘光了,所 ...

  2. 【读书笔记】Jenkins权威指南

    目录 一.Jenkins权威指南 二.书摘 第一章.Jenkins简介 第二章.迈入Jenkins的第一步 第三章.安装Jenkins 第四章.配置Jenkins服务器 第五章.设置构件作业 第六章. ...

  3. android开发读书笔记,android开发权威指南读书笔记

    第17章 Fragment 1.在res目录下增加 layout-sw600dp 目录,用于存放7英寸及以上尺寸屏幕的布局文件.10英寸以上平板用 sw720dp.如果是更小的屏幕,如 480*800 ...

  4. 读书笔记《CSS权威指南》

    阅读本书主要目的: 自从学会CSS以来,虽然熟练掌握了其使用方法和技巧,但对其底层的原理和实现并不清晰,阅读本书想进一步系统化的学习和深入研究其本质,对这门前端基础语言从熟练使用到真正理解. 第1章 ...

  5. 读书笔记《Hadoop权威指南第4版(Hadoop The Definitive Guide 4th)》

    Chapter 1 Meet Hadoop Data Storage and Analysis The problem is simple: although the storage capaciti ...

  6. 《Windows 8 权威指南》——1.3 引入全新内核休眠模式,实现“瞬间开机”

    本节书摘来自异步社区<Windows 8 权威指南>一书中的第1章,第1.3节,作者:胡耀文 , 尹成 , 李贝贝 , 卢磊 , 曹珍著,更多章节内容可以访问云栖社区"异步社区& ...

  7. 《Windows 8 权威指南》——1.5 版本对比

    本节书摘来自异步社区<Windows 8 权威指南>一书中的第1章,第1.5节,作者:胡耀文 , 尹成 , 李贝贝 , 卢磊 , 曹珍著,更多章节内容可以访问云栖社区"异步社区& ...

  8. 《Windows 8 权威指南》——2.10 几招解决Windows 8 Metro应用打不开的问题

    本节书摘来自异步社区<Windows 8 权威指南>一书中的第2章,第2.10节,作者:胡耀文 , 尹成 , 李贝贝 , 卢磊 , 曹珍著,更多章节内容可以访问云栖社区"异步社区 ...

  9. 《Windows 8 权威指南》——第1章 Windows 8已经到来的盛宴 1.1 Windows商店

    本节书摘来自异步社区<Windows 8 权威指南>一书中的第1章,第1.1节,作者:胡耀文 , 尹成 , 李贝贝 , 卢磊 , 曹珍著,更多章节内容可以访问云栖社区"异步社区& ...

最新文章

  1. UE4制作程序背景游戏 Make a game with Procedural Backgrounds in UE4
  2. #!/usr/bin/env python与#!/usr/bin/python的区别
  3. Java数据校验(Bean Validation / JSR303)
  4. Valgrind ---内存调试,内存泄漏检测以及性能分析的软件开发工具
  5. 互换性与技术测量电子版_圆柱公差与配合,公差等级的选用,一文全面介绍互换性与测量技术...
  6. Tensflow学习笔记(一)——TF生成并查看数据
  7. 计算机毕业设计中用C++实现职工工资管理系统
  8. cadence的PCB封装库导入Altium designer
  9. echarts全国各市地图坐标
  10. 关于打卡值班制度---一个excel开发工具小函数
  11. CentOS Mac 安装zsh,使用oh-my-zsh
  12. C语言hannoi汉诺塔
  13. python核心编程电子书_Python核心编程 PDF 超清第3版
  14. 共享打印机(联想M7605D)出现0x00000709错误代码的解决方法
  15. 返回多字段并用数组分割方式展示
  16. 谷歌play支付_Google Play的新功能
  17. AD19 keepoutlayer相关
  18. php mpm,PHP使用Apache中的ab测试网站的压力性能及mpm介绍
  19. c语言蚂蚁王国的货币系统,蚂蚁王国的探索之旅
  20. 快速提高pip安装速度!一劳永逸

热门文章

  1. 语音合成学习(一)综述
  2. Virual Studio 2022 C++ CLR 中 模拟 Android Studo,Eclipse 的 LogCat
  3. js选中html的数字设置倒计时,JS实现的网页倒计时数字时钟效果
  4. 基于知识图谱的问答系统简单流程理解(开放型知识图谱、实体类型较多的图谱)
  5. Linux安全之PHP木马查杀与防范
  6. 『重磅福利』提供WoS数据C1和EM重复字段清洗服务
  7. 得力标签打印机,驱动程序安装不上,手动安装好打印没反应
  8. LANDESK8.8版本操作说明书之核心服务器管理
  9. 【python实现抠图】
  10. 同治光绪之交的九江城