文章目录

  • 5.1 Windows的二进制文件格式PE/COFF
  • 5.2 PE的前身COFF

5.1 Windows的二进制文件格式PE/COFF

  • 32位Windows,微软引入PE的可执行格式
  • Win32的标准可执行文件格式
    • ELF一样平台扩展性和灵活性
  • PE与ELF同根,都由COFF格式
    • DEC的VAX/VMS上的COFF文件格式
  • 微软开发Windows NT时,成员来自于DEC公司的VAX/VMS小组
    • 就将原来系统上熟悉的工具和文件格式都搬过来,
    • 基础上做重新设计

  • “ Portable Executable”
  • 希望这个可执行文件格式能在不同版本的 Windows平台上用
  • 支持各种CPU
  • Windows NT、 Windows95到 Windows XP及 Windows Vista,还有 Windows CE都用PE可执行文件格式
  • Windows的PC版只支持x86的CPU,只关注PE在x86上的各种性质就行

  • VISUAL C++编译器产生的目标文件仍然用COFF格式
  • PE是COFF的一种扩展,结构在很大程度上相同,
    • 甚至跟ELF文件的基本结构也相同,都基于段的结构。
  • 下面讨论 Windows平台上的文件结构时
    • 目标文件默认为COFF格式
    • 而可执行文件为PE格式
  • 统称为PE/COFF文件
    • 也对比PE与COFF在结构方面的区别

  • 微软对64位 Windows上的PE文件结构稍改

    • 叫做PE32+
  • PE32+没添加任何结构,最大变化把那些原来32位字段变成64
    • 文件头中与地址相关的字段
  • 绝大部分情况下PE32+与PE的格式一致
    • 可将它看作是一般的PE文件

  • 与ELF文件相同, PE/COFF格式也用基于段的格式
  • 一个段可包含代码数据或其他信息
  • PE/COFF中,至少一个代码段
    • 叫“.code”,数据段叫“.data”。
  • 不同编译器产生的目标文件的段名不同,
    • VISUAL C++用“,code”和“,data”,
    • Borland编译器用“CODE”,“DATA”。
  • 跟ELF一样,段名只提示性作用,没实际意义
  • 如果用链接脚本来控制链接,段名可能会起到一定作用

  • 跟ELF一样,
  • PE也允许程序员将变量或函数放到自定义的段。
  • GCC中用

attribute((section(“name”)))扩展属性,

  • VISUAL C++中用“#pragma”编译器指示。
  • 如下面这个语句:

  • 把所有全局变量“global”放到“FOO”段去,
  • 用“pragram”将这个编译器指示换回来,恢复到“.data”,
  • 否则,任何全局变量和静态变量都会被放到“FOO”段

5.2 PE的前身COFF

5 windows PE COFF相关推荐

  1. 程序员的自我修养--链接、装载与库笔记:Windows PE/COFF

    1. Windows的二进制文件格式PE/COFF 在32位Windows平台下,微软引入了一种叫PE(Portable Executable)的可执行格式.作为Win32平台的标准可执行文件格式,P ...

  2. 基于windows PE文件的恶意代码分析;使用SystemInternal工具与内核调试器研究windows用户空间与内核空间...

    基于windows PE文件的恶意代码分析:使用SystemInternal工具与内核调试器研究windows用户空间与内核空间 ******************** 既然本篇的主角是PE文件,那 ...

  3. CLR探索系列:托管PE/COFF文件格式侧窥

    一直都想写篇文章来说说那些尘封在PE/Coff文件格式下的那些事,还有Metadata和EEClass是如何表现了一个静态的PE格式文件在内存中的映射结构.    在这篇文章里,我不去介绍window ...

  4. [读书][笔记]WINDOWS PE权威指南《一》PE的原理和基础 之 第一章 环境搭建及简单破解

    文章目录 前言 前期准备 1.1 开发语言MASM32 1.1.1 设置开发环境 下载安装masm 环境变量配置 测试是否配置成功 1.1.2 开发第一个源程序HelloWorld.asm 配置 代码 ...

  5. Windows PE入门基础知识:Windows PE的作用、命名规则、启动方式、启动原理

    Windows PE的全名是WindowsPreinstallationEnvironment(WinPE)直接从字面上翻译就 是"Windows预安装环境".微软的本意是:Win ...

  6. Windows PE变形练手2-开发一套自己的PE嵌入模板

    PE嵌入模板 编写一段代码,生成一个已经处理过重定位信息,同时所有的内容都在代码段里,并且没有导入表的PE程序,把这个程序嵌入到其他PE的相关位置,能够独立的运行,接下来是整理了2个模板,一个是Hel ...

  7. Windows Pe 第三章 PE头文件(上)

    第三章  PE头文件 本章是全书重点,所以要好好理解,概念比较多,但是非常重要. PE头文件记录了PE文件中所有的数据的组织方式,它类似于一本书的目录,通过目录我们可以快速定位到某个具体的章节:通过P ...

  8. 菜鸟教程终极篇之Microsoft Windows Pre-installation Environment (Windows PE) 2.0

        大家好啊.通过以前的菜鸟日记大家感觉咋样?今天给大家带来新的知识.学完本文所讲的内容,谁敢在说你是菜鸟.你就拿砖块拍它!HOHO!!Go on!              平时我们在使用电脑中 ...

  9. Windows PE 背景知识

    1.什么是 Windows PE? 1.1 简要介绍 Windows Preinstallation Environment (Windows PE) 是一个为 Windows 安装而设计的最小操作系 ...

  10. 【虚拟机里测试Windows PE的方法】

    有时候我们需要在虚拟机里测试Windows PE镜像文件.下面就以VMWare Workstation为例,步骤如下: 1.运行虚拟机软件VMWare Workstation并新建虚拟机(如xp). ...

最新文章

  1. 【硬核干货 | 程序的编译、链接、装载与运行】
  2. JSP简单练习-省略显示长字符串
  3. ThreadLocal应用与原理分析
  4. 萨蒂扬软件技术(南京)研发中心”落户高新区
  5. bzoj4448 SCOI2015 情报传递 message
  6. Introduction to Computer Networking学习笔记(十八):Switching 交换工作实现
  7. vsftpd 虚拟用户详细配置
  8. java 读取ssh2协议得到的数据_Java通过SSH2协议执行远程Shell脚本
  9. 利用setTimeout实现setInterval
  10. 如何用C#制作 微信个人机器人
  11. 如何使用Redis实现电商系统的库存扣减?
  12. sublime使用教程及快捷方式
  13. oracle和勇士,坑与“借鉴”,都是KPI逼的?
  14. 假设检验:一个总体参数的检验、总体方差检验、两个总体参数的检验和两个总体方差的检验
  15. 什么是“中间人攻击“?怎样防止这种攻击?
  16. Kotlin 学习笔记(二)—— 数据类、密闭类、循环写法以及常用集合操作符
  17. 点到直线的距离计算原理及MATLAB程序
  18. 智能汽车的福音:高通骁龙820A平台
  19. 金蝶K3系统BOM新增BOM编号与父项物料编码同步需求实现
  20. 联盟营销者的5个电子邮件营销最佳实践(一)

热门文章

  1. Tableau public保存为图片或pdf
  2. 大数据常用的挖掘方法,主要有哪些?
  3. Transformer论文阅读(一):CoTr: Efficiently Bridging CNN and Transformer for 3D Medical Image Segmentation
  4. matlab 水文频率曲线,水文频率曲线matlab
  5. wake on lan 实现远程开机(远程开关机程序)
  6. macos 设置黑白打印_如何停止双面打印成为macOS中的默认设置
  7. oracle x$bh 权限,关于Oracle的事务
  8. postman通过脚本动态获取token 和cookies
  9. 演化算法与适应度地形分析——再度思考
  10. html ckplayer.swf,Flash基础入门之ckplayer.js视频播放插件