首页 > 其他分享 >PE文件格式

PE文件格式

时间:2023-05-03 23:04:05浏览次数:38  
标签:文件 RVA NT IMAGE 文件格式 PE OPTIONAL

PE文件格式

VA是进程虚拟内存的绝对地址,RVA+ImageBase=VA

PE头

DOS头 _IMAGE_DOS_HEADER

e_magic :DOS 签名(4D5A)

e_lfanew: 指示NT头的偏移(NT头为_IMAGE_NT_HEADERS)

NT头

Signature:签名为00

File Header:文件头

Optional Header:可选头

文件头 _IMAGE_FILE_HEADER

machine很重要

NumberOfSections 用来指出文件中的存在的节区数量,该值一定要大于0

SizeOfOptionalHeader 用来指出IMAGE_OPTIONAL_HEADER32结构体的长度,PE装载器需要看这个数据来识别出结构体大小

Characteristics 用来表示文件的属性,文件是否可以运行等形态,是否为DLL文件等属性。

可选头 _IMAGE_OPTIONAL_HEADER32

Magic: 区分是 _IMAGE_OPTIONAL_HEADER32还是 _IMAGE_OPTIONAL_HEADER644

AddressOfEntryPoint: 持有EP的RVA值,指出程序最先执行的代码起始位置。

ImageBase:指出文件的优先装入地址,PE装载器先创建进程,再将文件载入内存里,然后把EIP寄存器的值设置为ImageBase+AddressOfEntryPoint

SectionAlignment,FileAlignment 后者指定了节区在磁盘文件中的最小单位,前者则指定了节区在内存里的最小单位

SizeOfImage:加载PE文件到内存后,SizeOfImage指定了PE Image在虚拟内存所占空间的大小。

SizeOfHeader: 指出了整个PE头的大小,第一节区所在的位置和SizeOfHeader距文件开始偏移的量相同。

NumberOfRvaAndSizes:用来指DataDirectory(IMAGE_OPTIONAL_HEADER32最后一个成员)数组的个数

DataDirectory: 是由IMAGE_DATA_DIRECTORY结构体组成的数组

节区头 IMAGE_SECTION_HEADER

img

Characteristics:这个属性规定了可写(读)等属性。

RVA to RAW

img

img

IAT

IMAGE_IMPORT_DESCRIPTOR

OriginalFirstThunk: INT的地址(RVA)

Name:库名称字符串的地址

FirstThunk: IAT的地址(RVA)

INT中各元素的值为IMAGE_IMPORT_BY_NAME结构体指针

img

img
INT(IMAGE_IMPORT_BY_NAME)

标签:文件,RVA,NT,IMAGE,文件格式,PE,OPTIONAL
From: https://www.cnblogs.com/imomi3/p/17369824.html

相关文章

  • 【Python&Hypermesh】ABAQUS导入网格,并在Part内保留SET
    在Hypermesh定义好set,划分好网格以后,可以导出为INP。然后在ABAQUS导入inp,就可以得到网格。但是这样倒进来的网格一般有两个问题:网格全在一个部件里,原来定义好的Set会出现在装配级别下,而不是Part级别,这在某些情况还是比较麻烦的Hypermesh中的component并不和ABAQUS的Part相对应......
  • 使用volatility dump从内存中重建PE文件——IAT函数出错的使用impscan解决
            好了,书中,说了操作的步骤,我们再vol2里实验下。查看进程:PSD:\Application\volatility3-stable>python.\vol.py-f"D:\book\malwarecookbook-master\malwarecookbook-master\16\7\laqma.vmem\laqma.vmem"windows.pslistVolatility3Fram......
  • typescript基本语法
    TypeScript是JavaScript的一个超集,为JavaScript添加了类型、接口、泛型、类、模块等新的特性。以下是TypeScript一些基本语法:变量声明在TypeScript中使用let、const、var关键字来声明变量,使用冒号+类型来指定变量的类型,例如:letcount:number=10;constname:string='Tom'......
  • about-keeping-pets
    关于养宠物Datetime:2023-05-03T20:04+08:00Categories:Essay这是一篇很久之前就想要写的东西,但是优先级不高所以一直放着,今晚看完了《忠犬八公》,是国内翻拍的(此篇文章不是影评)。小时候我很想养一只什么,可以是猫,也可以是狗,还可以是鸟,我还记得有一篇小学课文就是讲一个小孩想......
  • TypeScript 面试题
    一、TypeScript是什么?JavaScript是一种解释型的脚本语言,基于对象,跨平台的特性,活跃于各大网站制作中。而TypeScript则是以JavaScript作为基础,并对其扩展的一种新的语言, 二、TypeScript的内置数据类型有哪些?数字类型:用于表示数字类型的值。TypeScript中的所有数字都存储为浮......
  • java.Tang.CassNotFoundException javax.xmL.bind.DatatypeConverter
    报错如下图所示:故障原因:JAXBAPI是javaEE的API,因此在javaSE9.0中不再包含这个Jar包。java9中引入了模块的概念,默认情况下,JavaSE中将不再包含javaEE的Jar包而在java6/7/8时关于这个API都是捆绑在一起的解决方案:降低JDK版本到JDK8手动加入这些依赖......
  • TypeScript 基础语法以及注意事项
    TypeScript(简称TS)是一种由Microsoft开发的静态类型检查器,它在JavaScript的基础上添加了强类型和其他一些特性。以下是TS的一些基本语法和注意事项:变量声明 在TS中,变量声明时需要指定其类型,例如:这样就声明了一个名为myString的字符串变量,并将其赋值为"Hello,TypeScript!"......
  • filp_open函数
    我对filp_open函数有疑问:我可以从IS_ERR函数获取错误号,但是我不理解错误号的含义。在哪里可以找到filp_open错误号定义?fptr=filp_open(...)if(IS_ERR(fptr)){  printk("%d\",PTR_ERR(fptr));}        printk("lydfilp_openerror%d\n",PTR_ERR(src......
  • 【SpringBoot系列】四、SpringBoot特性_外部化配置(properties文件配置)
            SpringBoot允许将配置进行外部化(externalize),这样你就能够在不同的环境下使用相同的代码。你可以使用properties文件,yaml文件,环境变量和命令行参数来外部化配置。使用@Value注解,可以直接将属性值注入到beans中,然后通过Spring的Environment抽象或通过@ConfigurationP......
  • CsvHelper简单使用
    发现一个比较好用的处理csv的C#库,CsvHelper:CsvHelper是一个用于读取和写入CSV文件的C#库,支持自动类型转换、自定义类型转换器和灵活的映射选项等功能,使得读写CSV文件变得非常方便。安装:Install-PackageCsvHelper读取csv使用CsvHelper读取CSV文件非常简单。首先,您需要创建......