请输入您要查询的百科知识:

 

词条 PE格式
释义

一、概述:

PE格式,是微软Win32环境可执行文件的标准格式(所谓可执行文件不光是.EXE文件,还包括.DLL/.VXD/.SYS/.VDM等)。PE 就是Portable Executable 的缩写,PE文件衍生于早期建立在VAX/VMS上的COFF(Common Object File Format)文件格式。Portable 是指对于不同的Windows版本和不同的CPU类型上PE文件的格式是一样的,当然CPU不一样了,CPU指令的二进制编码是不一样的。只是文件中各种东西的布局是一样的。

PE文件使用的是一个平面地址空间,所有代码和数据都合并在一起,组成一个很大的结构。主要有:

.text 是在编译或汇编结束时产生的一种块,它的内容全是指令代码

.rdata 是运行期只读数据

.data 是初始化的数据块

.idata 包含其它外来DLL的函数及数据信息,即输入表

.rsrc 包含模块的全部资源:如图标、菜单、位图等

PE文件结构(简化):

-----------------

│1,DOS MZ header│

-----------------

│2,DOS stub │

-----------------

│3,PE header │

-----------------

│4,Section table│

-----------------

│5,Section 1 │

-----------------

│6,Section 2 │

-----------------

│ Section ... │

-----------------

│n,Section n │

-----------------

Dos Mz head 和Dos stub和称Dos文件头,PE文件的第一个字节起始于于MS-DOS头部,被称作IMAGE_DOS_HEADER.紧随Dos stub的是PE文件头(PE Header),PE Header的PE相关结构NT映像头(IMAGE_NT_HEADERS)的简称,其中包含许多PE装载器用到的重要字段。

1、入口点 Entry Point

2、文件偏移地址 File Offset

3、虚拟地址 Virtual Address 简称:VA

4、基地址 ImageBase

5、相对虚拟地址 Relative Virual Address 简称:RVA

公式: RVA (相对虚拟地址) =VA (虚拟地址) - ImageBase (基地址)

文件偏移地址和虚拟地址转换

在X86系统中,每个内存的大小是4KB,即0X1000个字节。

文件偏移地址 File Offset = RVA (相对虚拟地址) - ΔK

文件偏移地址 File Offset = VA (虚拟地址) - ImageBase (基地址) - ΔK

pe具体结构图:

pe格式的结构体定义可以在编译器的include文件夹里的winnt.h找到。

二、 pe的具体结构

如下所示(经过简化的,具体的可以查看winnt.h,不同字长的结构,其实大体一样的)。

几个宏定义:

typedef unsigned long DWORD; //主要是方便,不用敲太多字,呵呵

typedef unsigned short WORD; //这个也一样的

typedef unsigned char BYTE;

(1)、IMAGE_DOS_HEADER

typedef struct IMAGE_DOS_HEADER

{

WORD e_magic;

WORD e_cblp;

WORD e_cp;

WORD e_crlc;

WORD e_cparhdr;

WORD e_minalloc;

WORD e_maxalloc;

WORD e_ss;

WORD e_sp;

WORD e_csum;

WORD e_ip;

WORD e_cs;

WORD e_lfarlc;

WORD e_ovno;

WORD e_res[4];

WORD e_oemid;

WORD e_oeminfo;

WORD e_res2[10];

DWORD e_lfanew;

}IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;

这里的

(2)、IMAGE_NT_HEADERS

#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16

typedef struct IMAGE_NT_HEADERS

{

DWORD Signature;

IMAGE_FILE_HEADER FileHeader;

IMAGE_OPTIONAL_HEADER32 OptionalHeader;

}IMAGE_NT_HEADERS,*PIMAGE_NT_HEADERS;

typedef struct IMAGE_FILE_HEADER

{

WORD Machine;

WORD NumberOfSections;//节的数量

DWORD TimeDateStamp;

DWORD PointerToSymbols;

DWORD NumberOfSymbols;

WORD SizeOfOptionalHeader;

WORD Characteristics;

}IMAGE_FILE_HEADER,*PIMAGE_FILE_HEADER;

typedef struct IMAGE_OPTIONAL_HEADER32

{

WORD Magic;

BYTE MajorLinkerVersion;

BYTE MinorLinkerVersion;

DWORD SizeOfCode;

DWORD SizeOfInitializedData;

DWORD SizeOfUnInitializedData;

DWORD AddressOfEntryPoint;

DWORD BaseOfCode;

DWORD BaseOfData;

DWORD ImgaeBase;

DWORD SectionAlignment;

DWORD FileAlignment;

WORD MajorOperatingSystemVersion;

WORD MinorOperatingsystemversion;

WORD MajorImageVersion;

WORD MinorImageVersion;

WORD MajorSubsybtemVersion;

WORD MinorSubsybtemVersion;

DWORD Win32VersionValue;

DWORD SizeOfImage;

DWORD SizeoOfHeaders;

DWORD CheckSum;

WORD Subsystem;

WORD DllCharacteristics;

DWORD SizeOfStackReserve;

DWORD SizeOfStackCommit;

DWORD SizeOfHeapReserve;

DWORD SizeOfHeapCommit;

DWORD LoaderFlages;

DWORD NumberOfRvaAndSizes;

IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];

}IMAGE_OPTIONAL_HEADER32,*PIMAGE_OPTIONAL_HEADER32;

(3)、 IMAGE_SECTION_HEADER

#define IMAGE_SIZEOF_SHORT_NAME 8

typedef struct IMAGE_SECTION_HEADER

{

BYTE Name[IMAGE_SIZEOF_SHORT_NAME];

union

{

DWORD PhysicalAddress;

DWORD VirtualSize;

}Misc;

DWORD VirtualAddress; //节被载到内存之后的偏移

DWORD SizeOfRawData;

DWORD PointerToRawData;

DWORD PointerToRelocations;

DWORD PointerToLinenumbers;

WORD NumberOfRelocations;

WORD NumberOfLinenumbers;

DWORD Characteristics;

}IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;

typedef struct IMAGE_THUNK_DATA

{

union

{

DWORD ForwarderString;

DWORD Function;

DWORD Ordinal;

DWORD AddressOfData;

}u1;

}IMAGE_THUNK_DATA,*PIMAGE_THUNK_DATA;

typedef struct IMAGE_IMPORT_BY_NAME

{

WORD Hint;

BYTE Name;

}IMAGE_IMPORT_BY_NAME;

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2024/11/15 14:01:50