当前位置: 首页 > news >正文

西安南郊做网站企业如何网络推广

西安南郊做网站,企业如何网络推广,化妆品网站的建设目标,制作个人主页摘要 本文描述了Windows系统的PE文件格式。 PE文件格式简介 PE(Portable Executable)文件格式是一种Windows操作系统下的可执行文件格式。PE文件格式是由Microsoft基于COFF(Common Object File Format)格式所定义的&#xff0c…

摘要

本文描述了Windows系统的PE文件格式。

PE文件格式简介

PE(Portable Executable)文件格式是一种Windows操作系统下的可执行文件格式。PE文件格式是由Microsoft基于COFF(Common Object File Format)格式所定义的,它规定了Windows可执行文件(.exe)和动态链接库(.dll)的结构,包括文件头、节表、导入和导出表、资源表、重定位表等。PE格式被广泛应用于Windows操作系统及Windows软件开发中,它的特点是文件结构清晰、易于扩展、安全性高等。

PE文件格式分为PE32和PE32+,Windows 32位系统采用的是PE32,Windows 64位系统采用的是PE32+。PE32和PE32+之间的区别如下:

1. PE32+将PE32中的32位RVA字段和尺寸相关字段扩展成了64位。

2. 在PE32+中使用了新的数据结构,其中重要的变化是IMAGE_OPTIONAL_HEADER结构的扩展,以包括更多的字段和属性。

3. PE32+中使用了更多的CPU指令集,包括SSE2、SSE3和AVX等指令,以提高程序的性能和处理能力。

本文以PE32文件格式和x86机器模型作为示例进行讲解。

PE文件主要由若干节(Section)构成,节是PE文件格式的核心概念。

PE文件中节与CPU架构中的段(Segment)的概念相对应。加载器将不同内存访问属性的节被加载进内存后,由CPU的LDTR和GDTR指示的段描述表来描述。程序运行时,CPU通过的各种段选择子(如CS、DS、SS、ES、FS、GS等)来选择对应的段(如:代码段.text、数据段.data)的段描述符,通过前端总线(FSB)来访问段内的代码或数据。

COFF文件结构图

Windows系统中的VC编译出来的目标文件格式采用的COFF文件格式,其结构如下:

COFF(Common Object File Format)文件格式起源于UNIX系统,最早是由AT&T Bell Laboratories和Microsoft合作开发出来的。这种文件格式最初用于存储编译后的目标文件和共享库,并被广泛应用于UNIX系统中。COFF文件格式在1985年被POSIX标准所接受,并逐渐成为了一种通用的目标文件格式。

在后来的Windows平台中,微软对COFF进行了一些修改和扩展,并将其用作PE(Portable Executable)文件的基础格式。PE文件包含了Windows中可执行文件和动态链接库的细节信息,并成为了Windows系统中的主要二进制文件格式。在Windows上,COFF和PE同宗同源,联系紧密,可统称为COFF/PE格式。

PE文件结构图

PE文件结构定义

PE文件结构的定义在winnt.h头文件中,winnt.h典型路径为:

C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\um\winnt.h

DOS头

typedef struct _IMAGE_DOS_HEADER {      // DOS .EXE headerWORD   e_magic;                     // Magic number:'M','Z'WORD   e_cblp;                      // Bytes on last page of fileWORD   e_cp;                        // Pages in fileWORD   e_crlc;                      // RelocationsWORD   e_cparhdr;                   // Size of header in paragraphsWORD   e_minalloc;                  // Minimum extra paragraphs neededWORD   e_maxalloc;                  // Maximum extra paragraphs neededWORD   e_ss;                        // Initial (relative) SS valueWORD   e_sp;                        // Initial SP valueWORD   e_csum;                      // ChecksumWORD   e_ip;                        // Initial IP valueWORD   e_cs;                        // Initial (relative) CS valueWORD   e_lfarlc;                    // File address of relocation tableWORD   e_ovno;                      // Overlay numberWORD   e_res[4];                    // Reserved wordsWORD   e_oemid;                     // OEM identifier (for e_oeminfo)WORD   e_oeminfo;                   // OEM information; e_oemid specificWORD   e_res2[10];                  // Reserved wordsLONG   e_lfanew;                    // File address of new exe header} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;

DOS stub

DOS存根程序,一般只打印程序不能在DOS下运行的提示,也可以是具备完整功能的DOS程序。

在Windows上.exe和.dll文件都包含了DOS头和DOS stub。

映像文件头

PE的映像文件头采用了与COFF的映像文件头一致的结构。

typedef struct _IMAGE_FILE_HEADER {WORD    Machine; // 例如:intel 386 | 486 | 568,DEC Alpha AXP, IBM Power PC。WORD    NumberOfSections; // 节数量DWORD   TimeDateStamp;DWORD   PointerToSymbolTable;DWORD   NumberOfSymbols;WORD    SizeOfOptionalHeader; // 可选头尺寸可为0,也可比标准定义更大。WORD    Characteristics;
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;

PE可选头

#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES    16//
// 镜像数据目录项结构
//
typedef struct _IMAGE_DATA_DIRECTORY {DWORD   VirtualAddress;DWORD   Size;
} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;//
// Optional header format.
//
typedef struct _IMAGE_OPTIONAL_HEADER {//// Standard fields.//WORD    Magic; // 魔法标记:'P', 'E'BYTE    MajorLinkerVersion;BYTE    MinorLinkerVersion;DWORD   SizeOfCode;DWORD   SizeOfInitializedData;DWORD   SizeOfUninitializedData;DWORD   AddressOfEntryPoint;DWORD   BaseOfCode;DWORD   BaseOfData;//// NT additional fields.//DWORD   ImageBase;DWORD   SectionAlignment;DWORD   FileAlignment;WORD    MajorOperatingSystemVersion;WORD    MinorOperatingSystemVersion;WORD    MajorImageVersion;WORD    MinorImageVersion;WORD    MajorSubsystemVersion;WORD    MinorSubsystemVersion;DWORD   Win32VersionValue;DWORD   SizeOfImage;DWORD   SizeOfHeaders;DWORD   CheckSum;WORD    Subsystem; // 子系统类型:Windows | ConsoleWORD    DllCharacteristics;DWORD   SizeOfStackReserve;DWORD   SizeOfStackCommit;DWORD   SizeOfHeapReserve;DWORD   SizeOfHeapCommit;DWORD   LoaderFlags;DWORD   NumberOfRvaAndSizes;IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;

DataDirectory[16]根据索引值定义了不同的数据内容的起始RVA和尺寸,此数组是理解PE节内容语义的关键数据结构,它直接描述了导入表、导出表、资源等数据在内存中的RVA和尺寸。

数据是按照内存访问属性合并存储在特定的节中的,而不是按照语义分节的,数据语义和节名称没有对应关系。

节头表

PE文件中的代码、数据、资源全部是存储在不同内存访问属性的节中的,类似竹子的多节结构。

节头用于描述一节的名称、节内容的RVA、节大小、特征(是否缓存、代码、数据)等。

节头由定长尺寸的结构体组成,所有节的节头构成一个节头表。

节头表以一个空的节头结构作为结束标记。

//
// Section header format.
//#define IMAGE_SIZEOF_SHORT_NAME 8typedef struct _IMAGE_SECTION_HEADER {BYTE    Name[IMAGE_SIZEOF_SHORT_NAME]; // 节名称,最多8个字符union {DWORD   PhysicalAddress;DWORD   VirtualSize;} Misc;DWORD   VirtualAddress; // 节内容的起始RVADWORD   SizeOfRawData;DWORD   PointerToRawData;DWORD   PointerToRelocations;DWORD   PointerToLinenumbers;WORD    NumberOfRelocations;WORD    NumberOfLinenumbers;DWORD   Characteristics; // 内存访问属性:可读 | 可写 | 可执行
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;// 节头固定长度为40
#define IMAGE_SIZEOF_SECTION_HEADER 40

节内容

读者可将可节内容理解为于节头(header)对应的节体(body),类似HTML的头和体。

每一个节的内容是链接器根据代码或数据的内存访问属性合并而成的。

每一个节内容的起始地址和尺寸由节头表中的一个节头项描述。

节内的数据语义分界由IMAGE_DATA_DIRECTORY结构定义。

PE文件分析

dumpbin.exe是微软Visual Studio的一个工具,它可以用于检查和显示二进制文件的详细信息。它可以显示一个可执行文件、静态库、动态库或任何其他二进制文件的导出表、导入表、资源表、头文件、符号表和其他详细信息。它可以被用于分析和调试二进制文件,以了解它们内部的结构和内容。

dumpbin.exe的典型路径为:

%VS_INSTALL_DIR%\VC\Tools\MSVC\14.36.32532\bin\Hostx86\x86\dumpbin.exe

以下是一些dumpbin.exe的用法示例:

1. 显示可执行文件的导入表:

dumpbin /imports myapp.exe

 2. 显示静态库的符号表:

dumpbin /symbols mylib.lib

3. 显示动态库的导出表:

dumpbin /exports mydll.dll

4. 显示PE文件的各种头结构:

dumpbin /headers myfile.bin

5. 显示可执行文件的资源表:

dumpbin /resources myapp.exe

6.显示线程局部存储节的汇总信息和原始数据

dumpbin /section:.tls /rawdata myapp.exe

7.显示代码节的反汇编数据

dumpbin /section:.text /disasm myapp.exe

8.显示RVA重定位表

dumpbin /relocations myapp.exe

dumpbin.exe还有许多其他选项和用法,可以通过运行“dumpbin /?”命令来查看完整的用法和选项列表。

参考资料

PE文件结构详解-1

PE文件结构详解-2

PE Format - Win32 apps | Microsoft Learn

PE文件结构详解_大囚长的博客-CSDN博客

PE结构详解_weixin_44870554的博客-CSDN博客

PE文件格式 - 随笔分类 - 不会笑的孩子 - 博客园 (cnblogs.com)

PE结构分析 - Lonely Blog (wuhao13.xin)

DUMPBIN 选项 | Microsoft Learn

总结

PE文件格式是学习Windows系统反病毒、手动查杀木马技术所要求的前置基础知识,需要深刻领会。

http://www.yidumall.com/news/24184.html

相关文章:

  • 旅游网站的设计的前提百度官方营销推广平台
  • 济南大型网站建设如何免费创建自己的平台
  • 做网站怎么写预算公司网站
  • 套餐型网站建设合同提高关键词排名的软文案例
  • 免费网络电话软件河北百度seo点击软件
  • 中山移动网站建设报价百度在线客服人工服务
  • 温州营销网站制作费用西安专业网络推广公司
  • 微信营销 网站建设网络营销包括
  • 福州网站建设福州站建设慈溪seo排名
  • 网站布局用什么代码广告关键词有哪些类型
  • 无锡新吴区建设局网站保定seo排名优化
  • php交友网站开发实例本站3天更换一次域名yw
  • wordpress 页面类型seo手机端优化
  • 凌云网小说百度排名优化工具
  • 个人网站如何制作抖音seo公司
  • 郑州建站系统在线咨询友情链接是免费的吗
  • 交互做的好网站seoul是韩国哪个城市
  • 开网店一个月能赚多少钱在线seo关键词排名优化
  • 推荐聊城做网站的公司百度竞价推广课程
  • 7 the wordpress中国seo网站
  • 酒吧dj做歌网站百度快照怎么打开
  • 如何联系网站站长学生个人网页制作素材
  • 包头网站网站建设南宁网络优化seo费用
  • 做投资的网站好关键词推广价格
  • 微信做兼职什么网站好seo页面内容优化
  • 外贸营销型网站建设公司北京搜索引擎优化seo专员
  • 快速制作网站seo网站推广简历
  • 重庆seo1铜陵seo
  • 大连百度推广公司有几家黄山seo公司
  • 旅游网站的网页设计百度网盘服务电话6988