首页 > 其他分享 >PE文件(1)

PE文件(1)

时间:2023-04-09 12:55:17浏览次数:35  
标签:文件 RVA 偏移量 header 地址 PE

(一)PE文件的概念介绍

PE是 Win32环境自身所带的执行体文件格式。

前两部分为识别作用,在支持PE文件结构的操作系统中执行时,PE装载器将从 DOS MZ header 中找到 PE header 的起始偏移量。因而跳过了 DOS stub 直接定位到真正的文件头 PE header,然后开始执行。

(二)PE header 的结构:

 

 

 Signature PE标记,值为50h, 45h, 00h, 00h(PE/0/0)。
FileHeader 该结构域包含了关于PE文件物理分布的一般信息。
OptionalHeader 该结构域包含了关于PE文件逻辑分布的信息。

(三)optional header

optional header在PE header 中最后,作用很重要,包含了PE文件的逻辑分布信息。

 

 

这儿有个关于PE文件格式的常用术语: RVA。RVA 代表相对虚拟地址,是相对虚拟空间里的一个地址,而不是文件头部,类似文件偏移量。举例说明,如果PE文件装入虚拟地址(VA)空间的400000h处,且进程从虚址401000h开始执行,我们可以说进程执行起始地址在RVA 1000h。每个RVA都是相对于模块的起始VA的。

FieldMeanings
AddressOfEntryPoint PE装载器准备运行的PE文件的第一个指令的RVA。若您要改变整个执行的流程,可以将该值指定到新的RVA,这样新RVA处的指令首先被执行。
ImageBase PE文件的优先装载地址。比如,如果该值是400000h,PE装载器将尝试把文件装到虚拟地址空间的400000h处。字眼"优先"表示若该地址区域已被其他模块占用,那PE装载器会选用其他空闲地址。
SectionAlignment 内存中节对齐的粒度。例如,如果该值是4096 (1000h),那么每节的起始地址必须是4096的倍数。若第一节从401000h开始且大小是10个字节,则下一节必定从402000h开始,即使401000h和402000h之间还有很多空间没被使用。
FileAlignment

文件中节对齐的粒度。例如,如果该值是(200h),,那么每节的起始地址必须是512的倍数。若第一节从文件偏移量200h开始且大小是10个字节,则下一节必定位于偏移量400h: 即使偏移量512和1024之间还有很多空间没被使用/定义。

MajorSubsystemVersion
MinorSubsystemVersion
win32子系统版本。若PE文件是专门为Win32设计的,该子系统版本必定是4.0否则对话框不会有3维立体感。
SizeOfImage 内存中整个PE映像体的尺寸。它是所有头和节经过节对齐处理后的大小。
SizeOfHeaders 所有头+节表的大小,也就等于文件尺寸减去文件中所有节的尺寸。可以以此值作为PE文件第一节的文件偏移量。
Subsystem NT用来识别PE文件属于哪个子系统。 对于大多数Win32程序,只有两类值: Windows GUI 和 Windows CUI (控制台)。
DataDirectory IMAGE_DATA_DIRECTORY 结构数组。每个结构给出一个重要数据结构的RVA,比如引入地址表等。

 

 RVA的使用可以减少PE装载器的负担。

 

标签:文件,RVA,偏移量,header,地址,PE
From: https://www.cnblogs.com/wiiish/p/17300161.html

相关文章

  • 简单分享-项目中监听文件夹及文件的方法
    首先实现对应接口importorg.apache.commons.io.monitor.FileAlterationListenerAdaptor;importjava.io.File;publicclassFilterListenerextendsFileAlterationListenerAdaptor{@OverridepublicvoidonDirectoryCreate(Filedirectory){System.ou......
  • Nginx配置文件结构
    Nginx配置文件(conf/nginx.conf)整体分为三部分:*全局块和Nginx运行相关的全局配置*events和网络连接相关的配置*http块代理、缓存、日志记录、虚拟主机配置http全局块Server块Server全局块location块注:http......
  • 12.保存和读取XML和YMAL文件
    除了图像数据之外,有时程序中的尺寸较小的Mat类矩阵、字符串、数组等数据也需要进行保存,这些数据通常保存成XML文件或者YAML文件。本小节中将介绍如何利用OpenCV4中的函数将数据保存成XML文件或者YAML文件以及如何读取这两种文件中的数据。XML是一种元标记语言,所谓元标记就是......
  • keil 5 stm32f4 固件库 set up文件链接
    STSW-STM32065-STM32F4DSP和标准外设库-意法半导体STMicroelectronics ......
  • delphi中Base64编码转成PDF文件
    Base64编码转成PDF文件  PDF文件转成Base64编码:首先,将PDF文件加载到MemoryStream中:varms:TMemoryStream;beginms:=TMemoryStream.Create;tryms.LoadFromFile('file.pdf');然后,使用TIdEncoderMIME将TMemoryStream转换为Base64编码的字符串:varencoder:TIdEncoderMIME;base......
  • MFC-画笔HPEN
         ......
  • Python中将CSV文件转换为H5AD文件
    将CSV文件转换为H5AD文件,可以按照以下步骤进行:使用pandas库将CSV文件读入到Python中,并将其转换为dataframe格式: importpandasaspddf=pd.read_csv('data.csv')使用anndata库将dataframe转换为AnnData对象: importanndataasadadata=ad.AnnData(df)将......
  • python合并多个PPT文件到 文档\演示文稿1.pptx
    #encoding=utf8#-*-coding:utf-8-*-#pipinstallpython-pptx-ihttps://pypi.tuna.tsinghua.edu.cn/simple#pipinstallpython-docx-ihttps://pypi.tuna.tsinghua.edu.cn/simple#pipinstallpandas-ihttps://pypi.tuna.tsinghua.edu.cn/simple#pipinstall......
  • python opencv cv2.putText()显示中文问题
    完整代码如下:(其中cv2AddChineseText为封装代码)importcv2ascvfromPILimportImage,ImageDraw,ImageFontimportnumpyasnp#encoding:utf-8importbase64importrequestsdefcv2AddChineseText(img,text,position,textColor=(0,0,255),textSize=15):if......
  • ChatGPT 和 Whisper 模型的区别
    ChatGPT和Whisper模型是两个不同的模型,但都是由OpenAI开发的基于自然语言处理(NLP)的人工智能技术。ChatGPT是一种基于GPT(GenerativePre-trainedTransformer)架构的语言模型,它可以生成自然流畅的文本,用于生成对话、文章等各种文本内容。Whisper是一种针对语音助手等场景开发的模......