PE文件格式详解(3)

PE文件格式详解 本文描述了Windows系统的PE文件格式。 阅读详情

作者:MSDN
译者:李马 (http://home.nuc.edu.cn/~titilima

)

预定义段

   一个Windows NT的应用程序典型地拥有9个预定义段,它们是.text、.bss、.rdata、.data、.rsrc、.edata、.idata、.pdata和.debug。一些应用程序不需要所有的这些段,同样还有一些应用程序为了自己特殊的需要而定义了更多的段。这种做法与MS-DOS和Windows 3.1中的代码段和数据段相似。事实上,应用程序定义一个独特的段的方法是使用标准编译器来指示对代码段和数据段的命名,或者使用名称段编译器选项-NT——就和Windows 3.1中应用程序定义独特的代码段和数据段一样。
   以下是一个关于Windows NT PE文件之中一些有趣的公共段的讨论。

可执行代码段,.text

   Windows 3.1和Windows NT之间的一个区别就是Windows NT默认的做法是将所有的代码段(正如它们在Windows 3.1中所提到的那样)组成了一个单独的段,名为“.text”。既然Windows NT使用了基于页面的虚拟内存管理系统,那么将分开的代码放入不同的段之中的做法就不太明智了。因此,拥有一个大的代码段对于操作系统和应用程序开发者来说,都是十分方便的。
   .text段也包含了早先提到过的入口点。IAT亦存在于.text段之中的模块入口点之前。(IAT在.text段之中的存在非常有意义,因为这个表事实上是一系列的跳转指令,并且它们的跳转目标位置是已固定的地址。)当Windows NT的可执行映像装载入进程的地址空间时,IAT就和每一个导入函数的物理地址一同确定了。要在.text段之中查找IAT,装载器只用将模块的入口点定位,而IAT恰恰出现于入口点之前。既然每个入口拥有相同的尺寸,那么向后退查找这个表的起始位置就很容易了。

数据段,.bss、.rdata、.data

   .bss段表示应用程序的未初始化数据,包括所有函数或源模块中声明为static的变量。
   .rdata段表示只读的数据,比如字符串文字量、常量和调试目录信息。
   所有其它变量(除了出现在栈上的自动变量)存储在.data段之中。基本上,这些是应用程序或模块的全局变量。

资源段,.rsrc

   .rsrc段包含了模块的资源信息。它起始于一个资源目录结构,这个结构就像其它大多数结构一样,但是它的数据被更进一步地组织在了一棵资源树之中。以下的IMAGE_RESOURCE_DIRECTORY结构形成了这棵树的根和各个结点。
//WINNT.Htypedef struct _IMAGE_RESOURCE_DIRECTORY {  ULONG Characteristics;  ULONG TimeDateStamp;  USHORT MajorVersion;  USHORT MinorVersion;  USHORT NumberOfNamedEntries;  USHORT NumberOfIdEntries;} IMAGE_RESOURCE_DIRECTORY, *PIMAGE_RESOURCE_DIRECTORY;  
请看这个目录结构,你将会发现其中竟然没有指向下一个结点的指针。但是,在这个结构中有两个域NumberOfNamedEntries和NumberOfIdEntries代替了指针,它们被用来表示这个目录附有多少入口。附带说一句,我的意思是目录入口就在段数据之中的目录后边。有名称的入口按字母升序出现,再往后是按数值升序排列的ID入口。
   一个目录入口由两个域组成,正如下面IMAGE_RESOURCE_DIRECTORY_ENTRY结构所描述的那样: // WINNT.Htypedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {  ULONG Name;  ULONG OffsetToData;} IMAGE_RESOURCE_DIRECTORY_ENTRY, *PIMAGE_RESOURCE_DIRECTORY_ENTRY;
根据树的层级不同,这两个域也就有着不同的用途。Name域被用于标识一个资源种类,或者一种资源名称,或者一个资源的语言ID。OffsetToData与常常被用来在树之中指向兄弟结点——即一个目录结点或一个叶子结点。
   叶子结点是资源树之中最底层的结点,它们定义了当前资源数据的尺寸和位置。IMAGE_RESOURCE_DATA_ENTRY结构被用于描述每个叶子结点: // WINNT.Htypedef struct _IMAGE_RESOURCE_DATA_ENTRY {  ULONG OffsetToData;  ULONG Size;  ULONG CodePage;  ULONG Reserved;} IMAGE_RESOURCE_DATA_ENTRY, *PIMAGE_RESOURCE_DATA_ENTRY;
OffsetToData和Size这两个域表示了当前资源数据的位置和尺寸。既然这一信息主要是在应用程序装载以后由函数使用的,那么将OffsetToData作为一个相对虚拟的地址会更有意义一些。——幸甚,恰好是这样没错。非常有趣的是,所有其它的偏移量,比如从目录入口到其它目录的指针,都是相对于根结点位置的偏移量。
   要更清楚地了解这些内容,请参考图2。

图2.一个简单的资源树结构
   图2描述了一个非常简单的资源树,它包含了仅仅两个资源对象:一个菜单和一个字串表。更深一层地来说,它们各自都有一个子项。然而,你仍然可以看到资源树有多么复杂——即使它像这个一样只有一点点资源。
   在树的根部,第一个目录有一个文件中包含的所有资源种类的入口,而不管资源种类有多少。在图2中,有两个由树根标识的入口,一个是菜单的,另一个是字串表的。如果文件中拥有一个或多个对话框资源,那么根结点会再拥有一个入口,因此,就有了对话框资源的另一个分支。
   WINUSER.H中标识了基本的资源种类,我将它们列到了下面://WINUSER.H/** 预定义的资源种类*/#define RT_CURSOR MAKEINTRESOURCE(1)#define RT_BITMAP MAKEINTRESOURCE(2)#define RT_ICON MAKEINTRESOURCE(3)#define RT_MENU MAKEINTRESOURCE(4)#define RT_DIALOG MAKEINTRESOURCE(5)#define RT_STRING MAKEINTRESOURCE(6)#define RT_FONTDIR MAKEINTRESOURCE(7)#define RT_FONT MAKEINTRESOURCE(8)#define RT_ACCELERATOR MAKEINTRESOURCE(9)#define RT_RCDATA MAKEINTRESOURCE(10)#define RT_MESSAGETABLE MAKEINTRESOURCE(11)  
在树的第一层级,以上列出的MAKEINTRESOURCE值被放置在每个种类入口的Name处,它标识了不同的资源种类。
   每个根目录的入口都指向了树中第二层级的一个兄弟结点,这些结点也是目录,并且每个都拥有它们自己的入口。在这一层级,目录被用来以给定的种类标识每一个资源种类。如果你的应用程序中有多个菜单,那么树中的第二层级会为每个菜单都准备一个入口。
   你可能意识到了,资源可以由名称或整数标识。在这一层级,它们是通过目录结构的Name域来分辨的。如果如果Name域最重要的位被设置了,那么其它的31个位就会被用作一个到IMAGE_RESOURCE_DIR_STRING_U结构的偏移量。 // WINNT.Htypedef struct _IMAGE_RESOURCE_DIR_STRING_U {  USHORT Length;  WCHAR NameString[1];} IMAGE_RESOURCE_DIR_STRING_U, *PIMAGE_RESOURCE_DIR_STRING_U;  
这个结构仅仅是由一个2字节长的Length域和一个UNICODE字符Length组成的。
   另一方面,如果Name域最重要的位被清空,那么它的低31位就被用于表示资源的整数ID。图2示范的就是菜单资源作为一个命名的资源,以及字串表作为一个ID资源。
   如果有两个菜单资源,一个由名称标识,另一个由资源标识,那么它们二者就会在菜单资源目录之后拥有两个入口。有名称的资源入口在第一位,之后是由整数标识的资源。目录域NumberOfNamedEntries和NumberOfIdEntries将各自包含值1,表示当前的1个入口。
   在第二层级的下面,资源树就不再更深一步地扩展分支了。第一层级分支至表示每个资源种类的目录中,第二层级分支至由标识符表示的每个资源的目录中,第三层级是被个别标识的资源与它们各自的语言ID之间一对一的映射。要表示一个资源的语言ID,目录入口结构的Name域就被用来表示资源的主语言ID和子语言ID了。Windows NT的Win32 SDK开发包中列出了默认的值资源,例如对于0x0409这个值来说,0x09表示主语言LANG_ENGLISH,0x04则被定义为子语言的SUBLANG_ENGLISH_CAN。所有的语言ID值都定义于Windows NT Win32 SDK开发包的文件WINNT.H中。
   既然语言ID结点是树中最后的目录结点,那么入口结构的OffsetToData域就是到一个叶子结点(即前面提到过的IMAGE_RESOURCE_DATA_ENTRY结构)的偏移量。
   再回过头来参考图2,你会发现每个语言目录入口都对应着一个数据入口。这个结点仅仅表示了资源数据的尺寸以及资源数据的相对虚拟地址。
   在资源数据段(.rsrc)之中拥有这么多结构有一个好处,就是你可以不存取资源本身而直接可以从这个段收集很多信息。例如,你可以获得有多少种资源、哪些资源(如果有的话)使用了特别的语言ID、特定的资源是否存在以及单独种类资源的尺寸。为了示范如何利用这一信息,以下的函数说明了如何决定一个文件中包含的不同种类的资源: // PEFILE.Cint WINAPI GetListOfResourceTypes(LPVOID lpFile, HANDLE hHeap, char **pszResTypes){  PIMAGE_RESOURCE_DIRECTORY prdRoot;  PIMAGE_RESOURCE_DIRECTORY_ENTRY prde;  char *pMem;  int nCnt, i;  /* 获得资源树的根目录 */  if ((prdRoot = (PIMAGE_RESOURCE_DIRECTORY)ImageDirectoryOffset      (lpFile, IMAGE_DIRECTORY_ENTRY_RESOURCE)) == NULL)    return 0;  /* 在堆上分配足够的空间来包括所有类型 */  nCnt = prdRoot->NumberOfIdEntries * (MAXRESOURCENAME + 1);  *pszResTypes = (char *)HeapAlloc(hHeap, HEAP_ZERO_MEMORY,      nCnt);  if ((pMem = *pszResTypes) == NULL)    return 0;  /* 将指针指向第一个资源种类的入口 */  prde = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)((DWORD)prdRoot +      sizeof (IMAGE_RESOURCE_DIRECTORY));  /* 在所有的资源目录入口类型中循环 */  for (i = 0; i < prdRoot->NumberOfIdEntries; i++)  {    if (LoadString(hDll, prde->Name, pMem, MAXRESOURCENAME))      pMem += strlen(pMem) + 1;    prde++;  }  return nCnt;}  
这个函数将一个资源种类名称的列表写入了由pszResTypes标识的变量中。请注意,在这个函数的核心部分,LoadString是使用各自资源种类目录入口的Name域来作为字符串ID的。如果你查看PEFILE.RC,你会发现我定义了一系列的资源种类的字符串,并且它们的ID与它们在目录入口中的定义完全相同。PEFILE.DLL还有有一个函数,它返回了.rsrc段中的资源对象总数。这样一来,从这个段中提取其它的信息,借助这些函数或另外编写函数就方便多了。

导出数据段,.edata

   .edata段包含了应用程序或DLL的导出数据。在这个段出现的时候,它会包含一个到达导出信息的导出目录。 // WINNT.Htypedef struct _IMAGE_EXPORT_DIRECTORY {  ULONG Characteristics;  ULONG TimeDateStamp;  USHORT MajorVersion;  USHORT MinorVersion;  ULONG Name;  ULONG Base;  ULONG NumberOfFunctions;  ULONG NumberOfNames;  PULONG *AddressOfFunctions;  PULONG *AddressOfNames;  PUSHORT *AddressOfNameOrdinals;} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;  
导出目录中的Name域标识了可执行模块的名称。NumberOfFunctions域和NumberOfNames域表示模块中有多少导出的函数以及这些函数的名称。
   AddressOfFunctions域是一个到导出函数入口列表的偏移量。AddressOfNames域是到一个导出函数名称列表起始处偏移量的地址,这个列表是由null分隔的。AddressOfNameOrdinals是一个到相同导出函数顺序值(每个值2字节长)列表的偏移量。
   三个AddressOf...域是当模块装载时进程地址空间中的相对虚拟地址。一旦模块被装载,那么要获得进程地质空间中的确切地址的话,就应该在相对虚拟地址上加上模块的基地址。可是,在文件被装载前,仍然可以决定这一地址:只要从给定的域地址中减去段头部的虚拟地址(VirtualAddress),再加上段实体的偏移量(PointerToRawData),这个结果就是映像文件中的偏移量了。以下的例子解说了这一技术:
// PEFILE.Cint WINAPI GetExportFunctionNames(LPVOID lpFile, HANDLE hHeap, char **pszFunctions){  IMAGE_SECTION_HEADER sh;  PIMAGE_EXPORT_DIRECTORY ped;  char *pNames, *pCnt;  int i, nCnt;  /* 获得.edata域中的段头部和指向数据目录的指针 */  if ((ped = (PIMAGE_EXPORT_DIRECTORY)ImageDirectoryOffset      (lpFile, IMAGE_DIRECTORY_ENTRY_EXPORT)) == NULL)    return 0;  GetSectionHdrByName (lpFile, &sh, ".edata");  /* 决定导出函数名称的偏移量 */  pNames = (char *)(*(int *)((int)ped->AddressOfNames -    (int)sh.VirtualAddress + (int)sh.PointerToRawData +    (int)lpFile) - (int)sh.VirtualAddress +    (int)sh.PointerToRawData + (int)lpFile);  /* 计算出要为所有的字符串分配多少内存 */  pCnt = pNames;  for (i = 0; i < (int)ped->NumberOfNames; i++)    while (*pCnt++);  nCnt = (int)(pCnt.pNames);  /* 在堆上为函数名称分配内存 */  *pszFunctions = HeapAlloc (hHeap, HEAP_ZERO_MEMORY, nCnt);  /* 将所有字符串复制到缓冲区 */  CopyMemory((LPVOID)*pszFunctions, (LPVOID)pNames, nCnt);  return nCnt;}
请注意,在这个函数之中,变量pNames是由决定偏移量地址和当前偏移量位置的方法来赋值的。偏移量的地址和偏移量本身都是相对虚拟地址,因此在使用之前必须进行转换——函数之中体现了这一点。虽然你可以编写一个类似的函数来决定顺序值或函数入口点,但是我为什么不为你做好呢?——GetNumberOfExportedFunctions、GetExportFunctionEntryPoints和GetExportFunctionOrdinals已经存在于PEFILE.DLL之中了。
初步了解PE文件格式(上) 今天这篇博客只对PE文件进行大致的分析,使用一个例子并结合一个简单的PE文件格式图来说明PE文件格式。 阅读详情

相关推荐

易语言编译PE文件格式详解与实践

PE(Portable Executable)文件格式是Windows操作系统中用于可执行文件、目标代码、DLL(动态链接库)等的标准格式。它是一种高级的执行文件格式,为Windows提供了丰富的结构化信息,这些信息对于系统的加载和执行过程至关重要。本章旨在提供PE文件格式的基本概念、结构及重要组成,帮助读者建立对PE文件格式的初步认识。PE文件格式从结构上来看,可以划分为几个主要部分:DOS头、PE签名、COFF文件头、可选头、节表以及节数据。

weixin_42610010的博客 1089

深入剖析PE文件

不赖猴的笔记,转载请注明出处。   深入剖析PE文件PE文件是Win32的原生文件格式.每一个Win32可执行文件都遵循PE文件格式.对PE文件格式的了解可以加深你对Win32系统的深入理解. 一、        基本结构。上图便是PE文件的基本结构。(注意:DOS MZ Header和部分PE header的大小是不变的;DOS stub部分的大小是可变的。)

A00553344的专栏 4443

混合开关电容DCDC变换器技术解析与工程应用指南

在电源设计领域,传统DCDC变换器在高降压比或高升压比场景下,往往面临占空比过窄、开关应力大、效率偏低等瓶颈。开关电容变换器虽能实现固定比例的电压变换,却受限于调节能力。混合开关电容DCDC变换器通过“开关电容网络粗调变比+电感式DCDC细调输出”的策略,兼顾高效率、高功率密度与宽调压范围。本文梳理了其典型拓扑(如2:1/4:1 SC+Buck)、关键对比、控制策略(含软充电)及工程应用中的常见问题,帮助电源工程师在服务器供电、快充、车载电源等场景下快速选型与调试。

weixin_29164185的博客 316

静态分析:IDA逆向代码段说明 text、idata、rdata、data

一、定义:重定位就是把程序的逻辑地址空间变换成内存中的实际物理地址空间的过程,也就是说在装入时对目标程序中指令和数据的修改过程。他是实现多道程序在内存中同时运行的基础。重定位有两种,分别是动态重定位与静态重定位 二、分类 1、静态重定位:即在程序装入内存的过程中完成,是指在程序开始运行前,程序中的各个地址有关的项均已完成重定位,地址变换通常是在装入时一次完成的,以后不再改变,故成为静态

u012786754的专栏 4362

放弃FFT全频计算!在STM32F407上用DFT单点计算提速50%的优化技巧

本文详细介绍了在STM32F407上通过DFT单点计算实现比FFT快50%的优化技巧,特别适用于生物阻抗分析、振动监测等只需关注单一频点的嵌入式场景。通过预计算相位角、查表法和混合精度计算等策略,显著提升计算效率和内存利用率,同时保持高精度。

weixin_28738397的博客 195

catia之车灯设计——灯玻加厚之后(单层灯玻、多层灯玻的设计)

加厚完A面后如果主机厂没有给其他的面我们该怎么做?

qq_19829077的博客 1306

PE文件格式详解(下)

预定义段   一个Windows NT的应用程序典型地拥有9个预定义段,它们是.text、.bss、.rdata、.data、.rsrc、.edata、.idata、.pdata和.debug。一些应用程序不需要所有的这些段,同样还有一些应用程序为了自己特殊的需要而定义了更多的段。这种做法与MS-DOS和Windows 3.1中的代码段和数据段相似。事实上,应用程序定义一个独特的段的方法是使用标

1220

硬件即代码:用软件工程思维拆解F450无人机装配的模块化设计哲学

本文探讨了如何用软件工程思维重构DJI-F450无人机的模块化设计,将硬件装配提升为可编程系统。通过硬件抽象层、控制系统分层架构和扩展槽位设计模式,展示了无人机装配的模块化哲学,并结合实际案例说明如何优化性能与安全性。

weixin_29294975的博客 388

text段,data段,bss段,堆和栈

转自:https://blog.51cto.com/bavies/1341426 一个程序一般分为3段:text段,data段,bss段 text段:就是放程序代码的,编译时确定,只读。更进一步讲是存放处理器的机器指令,当各个源文件单独编译之后生成目标文件,经连接器链接各个目标文件并解决各个源文件之间函数的引用,与此同时,还得将所有目标文件中的.text段合在一起,但不是简单的将它们“堆...

似水流年的专栏 1348

OpenClaw + Antigravity + 飞书完整部署教程

在 Linux 服务器上部署 OpenClaw,使用 Antigravity 本地代理 AI 模型,并接入飞书实现 24 小时在线 AI 助手。

Maynor的博客 1788

【华为OD技术面试手撕真题】25、验证IP地址 | 手撕真题+思路参考+代码解析(C & C++ & Java & Python & JS)

验证IP地址 华为od机试真题,华为OD技术二面,华为od机考,华为od手撕真题,华为od技术二面,华为od机试,华为OD机试的高频手撕代码题,华为od八股文

KJ.JK 4043

pe文件分析

PE文件格式详解(上) Windows NT 3.1引入了一种名为PE文件格式的新可执行文件格式。PE文件格式的规范包含在了MSDN的CD中(Specs and Strategy, Specifications, Windows NT File Format Specifications),但是它非常之晦涩。     然而这一的文档并未提供足够的信息,所以开发者们无法很好地弄懂PE格式

flyingleo1981的专栏 844

【YOLOv8科研级优化】基于YOLOv9的GELAN模块重构C2f架构,显著提升模型精度与推理效率

打开确保模型解析器能识别GELANBlock模块。通过将YOLOv9的GELAN模块集成到YOLOv8的C2f模块中,我们实现了一个“强特征表达+高效计算”的目标检测模型。这个改进不仅在工程上能提升复杂场景下的检测效果,更在科研上提供了“多分支特征融合”的创新思路——这种思路可以延伸到其他检测网络(如Faster R-CNN、SSD)的改进中,帮你在论文中打造独特的研究点。

FJN110的博客 113

PE文件格式详解(3)

1.节区头     节区头中定义了各节区的属性。PE文件中的code(代码)、data(数据)、resource(资源)等按照属性分类存储在不同节区,这样可以保证程序的安全性。     IMAGE_SECTION_HEADER     节区头是由IMAGE_SECTION_HEADER结构体构成的数组,每个结构体对应一个节区。 代码     IMAGE_SECTION_HEADER

Crystal_Atom 1084

基于深度学习的涂胶缺陷类型检测:数据集处理与YOLOv8模型实现

本文提出了一种基于YOLOv8深度学习的涂胶缺陷检测系统,针对断胶、溢胶、缺胶、气泡及胶条宽度异常等常见缺陷类型,实现了从数据采集到模型部署的完整解决方案。系统采用工业相机采集涂胶图像,通过多形态数据增强策略解决样本稀缺问题,利用YOLOv8框架实现高效检测。相比传统人工目检和规则式机器视觉方法,该系统在检测精度(mAP达97.5%)和实时性(单图检测耗时0.038秒)方面表现优异,可满足智能制造场景下的涂胶质量检测需求。

huanghm88的专栏 276

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

PE文件格式详解(上)

PE文件格式详解(上) 2010年08月17日   Windows NT 3.1引入了一种名为PE文件格式的新可执行文件格式。PE文件格式的规范包含在了MSDN的CD中(Specs and Strategy, Specifications, Windows NT File Format Specifications),但是它非常之晦涩。   然而这一的文档并未提供足够的信息,所以开...

ijj72ijj 180

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

最详细PE文件格式讲解!!!!!

每个PE文件都是以一个DOS程序开始的,有了它,一旦程序在DOS下执行,DOS就能执行识别出这是一个有效的执行体,然后运行紧随MZ header的DOS stub(DOS块)。e_lfanew 字段是真正的PE文件头的相对偏移(RVA),指向真正的PE头的文件偏移位置,占用4字节,位于文件开始偏移3ch字节处。当PE文件通过加载器载入内存后,内存中的版本称为模块(Module),映射文件的起始地址称为模块句柄(hModule),可以通过模块句柄访问内存中的其他数据结构。基地址的值是由PE文件本身设定的。

SXXYNHHXX的博客 4123

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

PE文件格式全解读

PE文件包括DOS部分、PE文件头和节表和节数据。从DOS头(DOS header)到节区头(Sectionheader)是PE头部分,其下的节区合称PE体。节数据包括代码(.text)、数据(.data)、资源(.rsrc)节,分别保存。1.DOS部分:IMAGE_DOS_HEADER结构体的大小为40字节,需要注意的2个重要成员:0x0-0x01e_magic: DOS签名,表文件开始标识0x4d5a=”MZ”0x3c-0x3fe_lfanew:PE头部分的偏移0x000000b0.DOS存根位于DOS

凌阳的博客 5574

PE文件格式

PE文件是windows操作系统下使用的可执行文件格式。它是微软在UNIX平台的COFF(CommonObjectFileFormat,通用对象文件格式)基础上制作而成。最初设计用来提高程序在不同操作系统下的移植性,但实际上这种文件格式仅用在windows系列的操作系统下。PE文件是指32位的可执行文件,也称为PE32。64位的可执行文件称为PE+或者PE32,是PE文件的一种扩展形式(注意不是PE64)

weixin_43905689的博客 1431

PE文件格式详细解析(一)

PE文件格式详细解析 本篇文章将会详解Windows操作平台下PE文件格式,同时以具体的示例辅佐大家更好理解PE文件格式。本文章主要使用到以下两个工具:WinHex:用于将PE文件以16进制和ASCII码显示;PE tools解析和修改PE文件的工具。 1.PE文件格式 PE(Portable Executable,可移植的可执行文件),是Windows操作系统下可执行文件的总称。 PE文件往往指32位系统下的可执行文件,亦称PE32。64位的可执行文件称为PE+或PE32+,为PE文件的扩展格式。 PE文

weixin_47754894的博客 6797

PE文件格式粗浅认识

前言:最近开始学习PE文件格式,写点笔记做点记录,希望能够对和我一样正在学习PE文件的小伙伴有些启发,生出很棒的点子 ,当然,下面这些只是我这个初学者的一些简单的认识,针对和我一样的初学者,dalao可以绕道,另外,如果大家可以指出我的错误,我当感激不尽! 1.PE文件格式图总览 2.PE文件格式介绍 PE(Portable Execute)文件是Windows下可执行文件的总称,常见的有EX...

qq_45444695的博客 1131
上一篇: PE文件格式详解(2)
下一篇: PE文件格式详解(4)
Matrix_Designer
博客等级 码龄16年 58粉丝 296原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值