PE文件格式

PE文件格式

    • PE头:
      • DOS头
      • DOS存根
      • NT头
        • NT头:文件头
        • NT头:可选头
      • 节区头
        • .text(代码)(节区头)
        • .data(数据)(节区头)
        • .rdata
        • .idata,导入表
    • 最后给出一个PE文件的16进制编辑器中的截图,找到其中每一个头的信息,和导入表等:

  1. 例如像.exe .elf .all .sys为后缀的文件都是PE文件,下面以hello world.exe文件作为分析样本。
  2. 下面是PE文件的整体结构:

PE头:

  1. 学习PE文件格式主要学习的时PE文件的PE头,如何加载到内存,从何处开始运行、运行中需要的动态来链接库DLL有哪些、需要多大的堆/栈内存等,都以结构体的形式储存在PE头中。
  2. PE头包含一下几个部分:DOS头,DOS存根,NT头,.text(代码)(节区头),.data(数据)(节区头),.rsrc(资源节)(节区头)。

DOS头

  1. 在这里插入图片描述

  2. DOS头结构体如下:

  3. DOS头最重要的成员有两个:第一个e_magic : 前两个字节指明了DOS签名4D5A(MZ),第二个:e_lfanew,指明了NT头在文件内的偏移。

DOS存根

  1. DOS存根部分是上个时代遗留下来的产物,在windos平台下不会执行这段命令,但是在DOS环境下运行时会执行,显示出”This program cannot be run in DOS mode“,DOS存根为的就是在DOS环境下显示一些有用的信息二存在。
  2. 在DOS下查看,前13个字节会被翻译成汇编代码,调用了21号中断的09号功能,来显示后面字符串的内容:

NT头

  1. 根据DOS头最后的4个字节找到PE头在文件中的偏移:
  2. NT头结果提如下:=
  3. 首位的4个字节为签名:50 4F 00 00 -> “PE
  4. 其次是一个文件头(IMAGE_FILE_HEADER)和可选头(IMAGE_OPTIONAL_HEADER),下面来分别查看这两个结构体
NT头:文件头
  1. 去掉前面4个字节的标识后,后面的20个字节就是NT头的文件头:
  2. 第一个Machine指明了运行平台,每个CPU都拥有唯一的Machine码。
  3. 第二个NumberOfSections指明了文件中存在的节区的数目
  4. 倒数第二个SIzeOfOptionalHeader指明了后续可选头的大小为00F0(注意这个是小端序)
NT头:可选头
  1. 在这里插入图片描述
  2. 可选头的结构体如下:
  3. 其中包含的星系非常丰富,要完全认权可以自行查看微软的开发文档,则合理只介绍几个重要的结构
  4. ImageBase指出文件被加载到内存时优先装入的基地址。
  5. AddressOfEntryPoint有EP的RVA(文件被加载到内存中的相对前面ImageBase的偏移),指明了最先执行的代码的起始地址,有EIP = ImageBase+AddressOfEntryPoint,EIP寄存器指向要执行的代码。
  6. SizeOfHeader指出了整个PE头的大小。
  7. 最后一项DataDirectory,其由时IMAGE_DATA_DIRECTORY构成的数组,IMAGE_DATA_DIRECTORY结构体如下:在这里插入图片描述
  8. 第一项是RVA(加载到内存中是的偏移地址),Size(当前表的大小)。
  9. 节表的内容如下:
    10.在最后一项DataDirectory中主要重点关注,第一项导出目录(导出表) 和 第二项导入目录(导入表)
  10. 从上面可见,该hello.exe程序没有导出表,但是又一个导入表,其RVA为 : 00008000(但是这只是导入表的RVA,不是其在文件中的偏移,后面会进行转换)

节区头

  1. 节区头的结构体:
  2. Name指明了节的名字。
  3. VirtualAddress指明了节的偏移RVA(相对于ImageBase)
  4. PointerToRawData节在文件中的偏移
  5. Charactercis节的属性,是可读、可写。
.text(代码)(节区头)


2. 说明 .text节区 的RVA是 00001000,FOA是 00000400 ,之间相差了00000C00。

.data(数据)(节区头)


2. 说明 .data节区 的RVA是00003000,FOA是00002200. 之间相差了00000E00。

.rdata
  1. 说明**.rdata节区的RVA是00004000**,FOA是00002400,之间相差00001C00。
.idata,导入表

  1. 说明**.idata节区的RVA是00008000**,FOA是00003000,之间相差00005000
  2. .idata中包含导入函数的信息,即程序运行时需要调用的外部函数(或API)的信息。查看RVA:00008000刚好和前面查看的导入表RVA相同,说明.idata段的开头就是导入表的所在位置,但是现在只知道RVA(其加载到内存中后的偏移地址),并不知道其FOA(在文件中的偏移)。
  3. 但是由于.idata的RVA刚好和导入表的RVA相同,所以直接使用.idata的FOA(PointerToRawData),作为导入表的在文件中的偏移00003000,去查得导入表,其一共导入了两个库(一个占20字节,最后20字节全为0):
  4. 根据导入表的结构体:
  5. 其中那么字段指明了导入的动态链接库DLL的名字的RVA000086E8,安静其转化为FOA即可定位到该库的具体位置:000086E8-00005000(前面在idata中计算出的RVA与FOA的差值)=36E8,定位到下面这张图的位置,库的名字叫KERNEL32.dll,KERNEL32.dll是Windows操作系统中一个非常核心的32位动态链接库(DLL)文件,它对系统运行至关重要。:
  6. 查看第二个动态链接库:00008760-00005000=0003760,定位到下面这张图,msvcrt.dll在这里插入图片描述

最后给出一个PE文件的16进制编辑器中的截图,找到其中每一个头的信息,和导入表等:

  1. 原图如下:在这里插入图片描述
  2. 标识各个部分后如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/567868.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2015NOIP普及组真题 3. 求和

线上OJ: 一本通:http://ybt.ssoier.cn:8088/problem_show.php?pid1971 核心思想: 本题的约束条件有两个: 条件1、colorx colorz 条件2、x、y、z的坐标满足 y − x z − y(即 y 在 x 和 z 的中心位置) …

scipy csr_matrix: understand indptr

See https://stackoverflow.com/questions/52299420/scipy-csr-matrix-understand-indptr

Esp8266 - USB开关分享(开源)

文章目录 简介推广自己gitee项目地址:嘉立创项目地址:联系我们 功能演示视频原理图嘉立创PCB开源地址原理图PCB预览 固件烧录代码编译烧录1. 软件和驱动安装2. 代码编译1. 安装所需要的依赖库文件2. 下载源代码3. 烧录代码 使用说明1. 设备配网2. 打开设备操作页面3…

NAT的知识点和实现

1.NAT的作用: (1)、把内网私网IP转换公网IP; (2)、隐藏内网,起到保护内网作用; (3)、适当的缓解的IPv4地址空间枯竭; (4&#xff…

[RTOS 学习记录] 复杂工程项目的管理

[RTOS 学习记录] 复杂工程项目的管理 这篇文章是我阅读《嵌入式实时操作系统μCOS-II原理及应用》后的读书笔记,记录目的是为了个人后续回顾复习使用。 前置内容: 工程管理工具make及makefile 文章目录 1 批处理文件与makefile的综合使用1.1 批处理文件…

Qt实现XYModem协议(五)

1 概述 XMODEM协议是一种使用拨号调制解调器的个人计算机通信中广泛使用的异步文件运输协议。这种协议以128字节块的形式传输数据,并且每个块都使用一个校验和过程来进行错误检测。使用循环冗余校验的与XMODEM相应的一种协议称为XMODEM-CRC。还有一种是XMODEM-1K&am…

4月23号总结

java实现发送邮件 在做聊天室项目的时候&#xff0c;由于需要发送邮箱验证码&#xff0c;所以自己查找了这方面的内容。 首先需要在Maven里面依赖 <dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><versio…

英伟达AI系列免费公开课

英伟达公开课官网地址 Augment your LLM Using Retrieval Augmented Generation Building RAG Agents with LLMs langchain的workflow: ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/c90cb157c9c84bb5b3da380ec56f5c2a.png Generative AI Explained

Linux系统中安装MySQL

1、在电脑中安装虚拟机 2、df -h查看光盘是否挂载&#xff0c;没挂载用mount -o ro /dev/sr0 /media命令挂载 3、进入etc/yum.repos.d目录查看仓是否配置&#xff0c;若配置进行下一一步&#xff0c;未配置则进行配置 配置软件仓库 [rootlocalhost yum.repos.d]# vim rhle.r…

Linux中文件描述符与重定向的深入探索

目录 1. 理解C语言的文件操作函数 2. 操作系统的文件操作接口 3. 文件描述符详解和其内核本质 4. 如何理解Linux下一切皆文件 5. Linux中的重定向 5.1 输出重定向 5.2 追加重定向 5.3 输入重定向 6. 结合文件描述符理解重定向 7.重定向的系统调用 在Linux操作系统中&a…

springboot整合mybatis-plus模版

1.创建springboot项目 Maven类型Lombok依赖Spring Web 依赖MySQL Driver依赖pom.xml&#xff1a;<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/…

上门废品回收小程序,互联网回收拥有哪些特点?

随着社会的进步&#xff0c;人们的生活水平不断提高&#xff0c;产生的可回收物也在不断上升&#xff0c;每年垃圾站都能产生大量的可回收物&#xff0c;这也造成了资源的浪费。 目前&#xff0c;加快发展回收模式&#xff0c;提高我国回收效率成为了当下回收市场发展的重要方…

[笔试强训day04]

文章目录 WY22 Fibonacci数列NC242 单词搜索BC140 杨辉三角 WY22 Fibonacci数列 WY22 Fibonacci数列 #include<iostream> #include<cmath>using namespace std;int n;int main() {cin>>n;int a0,b1,c1;while(n>c){ab;bc;cab;}int ansmin(n-b,c-n);cout&l…

windows mysql8 安装后 提示密码不对,修改下密码认证方式就可以了

Windows上安装MySQL8后提示密码不对的问题可以通过以下步骤解决&#xff1a; 安装MySQL8 首先&#xff0c;你需要下载并安装MySQL8。你可以从MySQL官方网站下载符合你操作系统版本的安装包。 安装地址是&#xff1a;MySQL :: Download MySQL Installer 安装过程中&#xff…

ACRN Intel推出的虚拟机是啥样的?

前言 ACRN作为Intel为工控领域推出的一个小型化的虚拟机&#xff0c;它的特点主要有这么几个&#xff1a; 1.针对Intel的芯片做了非常强的优化 2.RT-VM实时虚拟机的实时性很好 3.CACHE缓存技术发挥的好 4.TCC技术 / 当然不是所有intel的芯片都支持&#xff0c;&#xff0c…

鸿蒙(HarmonyOS)性能优化实战-多线程共享内存

概述 在应用开发中&#xff0c;为了避免主线程阻塞&#xff0c;提高应用性能&#xff0c;需要将一些耗时操作放在子线程中执行。此时&#xff0c;子线程就需要访问主线程中的数据。ArkTS采用了基于消息通信的Actor并发模型&#xff0c;具有内存隔离的特性&#xff0c;所以跨线…

产品规划|如何从0到1规划设计一款产品?

我们要如何从0到1规划设计一款产品?在前期工作我们需要做什么呢?下面这篇文章就是关于此的相关内容,大家一起往下看多多了解了解吧! 一、什么是产品规划? 产品规划是一种策略,它设定了产品的价值和目标,并确定实施方案以实现这些目标。它考虑了产品的整个生命周期,基于…

[RTOS 学习记录] 工程管理工具make及makefile

[RTOS 学习记录] 工程管理工具make及makefile 这篇文章是我阅读《嵌入式实时操作系统μCOS-II原理及应用》后的读书笔记&#xff0c;记录目的是为了个人后续回顾复习使用。 前置内容&#xff1a; 开发工具 Borland C/C 3.1 精简版 文章目录 1 make 工具2 makefile 的内容结构3…

【学习笔记二十四】EWM补货策略和自动补货配置

一、EWM补货策略概述 1.计划补货 ①以联机或批处理模式启动 ②根据最大和最小数量计算补货 ③仅当库存量低于最低数量时才开始 ④四舍五入至最小补货数量的倍数 2.自动补货 ①在WT确认期间启动 ②根据最大和最小数量计算补货 ③只有当库存量低于最低数量时才开始 ④四舍…

Linux thermal框架介绍

RK3568温控 cat /sys/class/thermal/thermal_zone0/temp cat /sys/class/thermal/thermal_zone1/temp cat /sys/class/thermal/cooling_device0/cur_state cat /sys/class/thermal/cooling_device1/cur_state cat /sys/class/thermal/cooling_device2/cur_state thermal_zone…