导航:首页 > 文件目录 > pe文件格式示意图

pe文件格式示意图

发布时间:2023-08-08 03:33:26

❶ 请问cfa和pek是什么格式的文件如何打开

PE是目前Windows平台上主流的可执行文件格式,包括常见的可执行程序EXE文件、动态链接库DLL文件等。
学习PE文件格式对于了解windows操作系统是必不可少的。
与PE有关的基本概念
地址
虚拟内存地址(Virtual Address, VA)PE文件中的指令被装入内存后的地址。
相对虚拟内存地址(Reverse Virtual Address, RVA相对虚拟地址是内存地址相对于映射基址的偏移量。
文件偏移地址(File Offset Address, FOA)数据在PE文件中的地址叫文件偏移地址,这是文件在磁盘上存放时相对于文件开头的偏移。
装在基址(Image base)PE装入内存时的基地址。默认情况下,EXE文件在内存中的基地址时0x00400000, DLL文件是0x10000000。这些位置可以通过修改编译选项更改。
虚拟内存地址、映射基址、相对虚拟内存地址的关系:
VA = Image Base + RVA
文件偏移是相对于文件开始处0字节的偏移,相对虚拟地址则是相对于装载基址0x00400000处的偏移。(1)PE文件中的数据按照磁盘数据标准存放,以0x200字节为基本单位进行组织,PE数据节的大小永远是0x200的整数倍。(2)当代码装入内存后,将按照内存数据标准存放,并以0x1000字节为基本单位进行组织,内存中的节总是0x1000的整数倍。
内存中数据节相对于装载基址的偏移量和文件中数据节的偏移量的差异称为节偏移。
文件偏移地址 = 虚拟内存地址(VA) - 装载基址(Image Base) - 节偏移
= RVA - 节偏移

DOS头的下面是DOS Stub。整个DOS Stub是一个字节块,其内容随着链接时使用的链接器不同而不同,PE中并没有与之对应的相关结构。
PE头部解析
紧跟在DOS stub后面的是PE头标识Signature。与大部分文件格式的头部结构一样,PE头部信息中有一个四字节的标识,其内容固定,对应的ASCII码的字符串是“PE00”。
PE头IMAGE_NT_HEADERS
IMAGE_NT_HEADERS是广义上的PE头,在标准的PE文件中其大小为456个字节,由4个字节的PE标识符 + IMAGE_FILE_HEADER + IMAGE_OPTIONAL_HEADER32组成。
IMAGE_NT_HEADERS {
Dword Signature; // +0000h - PE文件标识,“PE00”
IMAGE_FILE_HEADER FileHeader; // +0004h - PE标准头
IMAGE_OPTIONAL_HEADER32 OptionalHeader; // +0018h - PE扩展头
}
标准PE头IMAGE_FILE_HEADER
标准PE头IMAGE_FILE_HEADER紧跟在PE头标识后,即位于IMAGE_DOS_HEADER的e_lfanew + 4的位置。由此位置开始的20个字节为数据结构标准PE头IMAGE_FILE_HEADER的内容。它记录了PE文件的全局属性,如该PE文件运行的平台、PE文件类型、文件中存在的节的总数等

❷ pe文件结构剖析,什么是pe文件

PE文件被抄称为可移植的执行体是Portable Execute的全称,常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL)
详细的信息到http://ke..com/view/1087038.htm 查看

❸ pe文件的文件格式

A.DOS STUB和DOS头
DOS插桩程序在大多数情况下由汇编器/编译器自动产生.通常它调用INT 21H服务9来显示上述字符串.可以通过IMAGE_DOS_HEADER结构来识别一个合法的DOS头.这个结构的头两个字节肯定是MZ.可通过该结构的e_lfanew成员来找到PE文件的开始标志.MS-DOS头部占据了PE文件的头64个字节.在微软的WINNT.H中可以找到其内容结构的描述. 在DOS STUB后是PE文件头(PE header).PE文件头是PE相关结构IMGAE_NT_HEADERS的简称,即NT映像头,存放PE整个文件信息发布的重要字段,包含了PE装载器用到的重要域.执行体在操作系统中执行时,PE装载器将从DOS MZ头中找到PE头文件的起始偏移量e_lfanew,从而跳过DOS STUB直接定位真正的PE文件.它由3部分组成:
(1)PE文件标志(4H字节)
PE文件标志0x50450000即PE00,标志着NT映像头的开始,也是PE文件中与windows有关内容的开始.
(2)映像文件(14H字节)
是NT映像文件的主要部分,包含PE文件的基本信息
(3)可选映像头
包含PE文件的逻辑分布信息.
C.节表
节表其实是紧跟NT映像文件的一个结构数组.其成员数目由映像文件头结构NumberOFSectios域的值来决定.
D.节
PE文件的真正内容划分为块,称之为节.节的划分基于各组数据的共同属性.惟有节的属性设置决定了节的特性和功能.典型的windows NT应用程序可以具有9个节:.texr,.bss.rdata,.data,.rsrc,edata,idata,pdata,.debug
判断一个文件是否为PE文件
var //检测指定文件是否有效PE文件
PEDosHead: TImageDosHeader;
PENTHead: TImageNtHeaders;
m_file: integer;
begin
Result := False;
m_file := FileOpen(filename, fmOpenRead or fmShareDenyNone); //只读和其它任意
if m_File > 0 then
try
FileSeek(m_file, 0, soFromBeginning); //将指针挪至文件头
FileRead(m_file, PEDosHead, SizeOf(PEDosHead)); //读PEDosHead结构
FileSeek(m_file, PEDosHead._lfanew, soFromBeginning); //将指针挪至_lfanew
FileRead(m_file, PENTHead, SizeOf(PENTHead)); //读PENTHead结构
finally
FileClose(m_file);
end;
if (PENTHead.Signature = IMAGE_NT_SIGNATURE) then //检验文件头部第一个字的值是否等于 IMAGE_DOS_SIGNATURE
Result := True;
end;
pe文件结构图

❹ U盘PE中的PE是什么意思

相当于一个精简的系统,Microsoft Windows 预安装环境(Windows PE)。

1、全称 Windows Preinstallation Environment,DOS下工作的图形界面,相当于启动盘,但比启动盘功能强,是一个基于WindowsXP核心的迷你操作系统,也可以讲是XP的精简版。

2、Windows PE是Windows系统下的可执行文件的一种(还有NE、LE),是裂拦微软设计、TIS(Tool Interface Standard,工具接口标准)委员会批准的一种可执行文件格式。

3、PE的意思是Portable Executable(可移植可执行)。所有Windows下的32位或64位可执行文件都是PE文件格败姿式,其中包括DLL、EXE、FON、OCX、LIB和部分SYS文件。

4、Windows PE以ISO光盘或其他可携设备作媒介,下载后直接刻盘在BIOS里设置光盘启动,然后Windows PE会自动引导进入一个命令行界面,可以读写FAT32、NTFS等格式的分区,可以对硬盘分区、格式化(可以格成NTFS的)。

5、Windows PE启动后支持IPv4和IPv6,还可以使用网络环境。使用net命令,就可以简单地访问服务器。

(4)pe文件格式示意图扩展阅读:

Windows PE主要的使用环境是虚拟机,虚拟机环境与实际PC环境几乎没有区别,如果用户不清楚虚拟机也没关系,就当是在真实PC上直接运行。

将BIOS中设置成光驱引导,并开始启动系统,当屏幕画察源绝面上出现“Press any key boot from cd”时,按任意键从光驱上的Windows PE引导启动。

如果用户的存储设备驱动不被支持,在启动时按下F6键可加载特殊设备的驱动。当启动到桌面时系统会做一些如调整分辨率的工作,最后打开默认的CMD命令行解释工具。

Windows PE启动相当快捷,而且对启动环境要求不高,其功能几乎相当于安装了一个 Windows 的命令行版本。因此,对于个人计算机用户,只要将其写入U盘(或刻录在一张光碟上),便可放心地去解决初始化系统之类的问题。

网络—Windows PE

网络—PE

❺ PE是什么文件呀

PE教程1: PE文件格式一览
考虑到早期写的PE教程1是自己所有教程中最糟糕的一篇,此番决心彻底重写一篇以飨读者。

PE 的意思就是 Portable Executable(可移植的执行体)。它是 Win32环境自身所带的执行体文件格式。它的一些特性继承自 Unix的 Coff (common object file format)文件格式。"portable executable"(可移植的执行体)意味着此文件格式是跨win32平台的 : 即使Windows运行在非Intel的CPU上,任何win32平台的PE装载器都能识别和使用该文件格式。当然,移植到不同的CPU上PE执行体必然得有一些改变。所有 win32执行体 (除了VxD和16位的Dll)都使用PE文件格式,包括NT的内核模式驱动程序(kernel mode drivers)。因而研究PE文件格式给了我们洞悉Windows结构的良机。

本教程就让我们浏览一下 PE文件格式的概要。

DOS MZ header
DOS stub
PE header
Section table
Section 1
Section 2
Section ...
Section n

上图是 PE文件结构的总体层次分布。所有 PE文件(甚至32位的 DLLs) 必须以一个简单的 DOS MZ header 开始。我们通常对此结构没有太大兴趣。有了它,一旦程序在DOS下执行,DOS就能识别出这是有效的执行体,然后运行紧随 MZ header 之后的 DOS stub。DOS stub实际上是个有效的 EXE,在不支持 PE文件格式的操作系统中,它将简单显示一个错误提示,类似于字符串 "This program requires Windows" 或者程序员可根据自己的意图实现完整的 DOS代码。通常我们也不对 DOS stub 太感兴趣: 因为大多数情况下它是由汇编器/编译器自动生成。通常,它简单调用中断21h服务9来显示字符串"This program cannot run in DOS mode"。

紧接着 DOS stub 的是 PE header。 PE header 是PE相关结构 IMAGE_NT_HEADERS 的简称,其中包含了许多PE装载器用到的重要域。当我们更加深入研究PE文件格式后,将对这些重要域耳目能详。执行体在支持PE文件结构的操作系统中执行时,PE装载器将从 DOS MZ header 中找到 PE header 的起始偏移量。因而跳过了 DOS stub 直接定位到真正的文件头 PE header。

PE文件的真正内容划分成块,称之为sections(节)。每节是一块拥有共同属性的数据,比如代码/数据、读/写等。我们可以把PE文件想象成一逻辑磁盘,PE header 是磁盘的boot扇区,而sections就是各种文件,每种文件自然就有不同属性如只读、系统、隐藏、文档等等。 值得我们注意的是 ---- 节的划分是基于各组数据的共同属性: 而不是逻辑概念。重要的不是数据/代码是如何使用的,如果PE文件中的数据/代码拥有相同属性,它们就能被归入同一节中。不必关心节中类似于"data", "code"或其他的逻辑概念: 如果数据和代码拥有相同属性,它们就可以被归入同一个节中。(译者注:节名称仅仅是个区别不同节的符号而已,类似"data", "code"的命名只为了便于识别,惟有节的属性设置决定了节的特性和功能)如果某块数据想付为只读属性,就可以将该块数据放入置为只读的节中,当PE装载器映射节内容时,它会检查相关节属性并置对应内存块为指定属性。

如果我们将PE文件格式视为一逻辑磁盘,PE header是boot扇区而sections是各种文件,但我们仍缺乏足够信息来定位磁盘上的不同文件,譬如,什么是PE文件格式中等价于目录的东东?别急,那就是 PE header 接下来的数组结构 section table(节表)。 每个结构包含对应节的属性、文件偏移量、虚拟偏移量等。如果PE文件里有5个节,那么此结构数组内就有5个成员。因此,我们便可以把节表视为逻辑磁盘中的根目录,每个数组成员等价于根目录中目录项。

以上就是PE文件格式的物理分布,下面将总结一下装载一PE文件的主要步骤:

当PE文件被执行,PE装载器检查 DOS MZ header 里的 PE header 偏移量。如果找到,则跳转到 PE header。
PE装载器检查 PE header 的有效性。如果有效,就跳转到PE header的尾部。
紧跟 PE header 的是节表。PE装载器读取其中的节信息,并采用文件映射方法将这些节映射到内存,同时付上节表里指定的节属性。
PE文件映射入内存后,PE装载器将处理PE文件中类似 import table(引入表)逻辑部分。
上述步骤是基于本人观察后的简述,显然还有一些不够精确的地方,但基本明晰了执行体被处理的过程。

其它看这里~
http://www.pediy.com/tutorial/chap8/Chap8-1-1.htm

❻ 什么是PE文件分析呀

即对PE文件的分析。

PE 文件格式
对 PE 的一些说明: PE 是 Portable Excutable 的缩写,是指“可移植可执行”文件,是 32 位 Windows (包括 OS/2 )可执行文件的标准格式。以前的 16 位 Windows 可执行文件的格式称为 NE ,即 New Excutable “新可执行”文件。参考: NE 文件格式

一、简介

PE文件最前面是一个DOS可执行文件(STUB),这使PE文件成为一个合法的MS-DOS可执行
文件。
DOS文件头后面是一个32位的PE文件标志0X00004550(IMAGE_NT_SIGNATURE)。
接着就是PE的文件头了,包含的信息有该程序运行平台、有多少段(sections)、文件
链接的时间、它是一个可执行文件(EXE)还是一个动态链接库(DLL)或是其他。
后面紧接着有一个“可选”头部(这个部分总是存在,但是因为COFF在库(Libraries)
中用了这个词,在一可执行模块中并没有用这个词,但是仍被叫做可选的)。这可部分包含程
序加载的更多的信息:开始地址、保留堆栈数量、数据段大小等等。
可选头中还有一个重要的域是一叫做“数据目录表”(data directories)的数组;表
中的每一项是一个指向某一个段的指针。例如:如果某程序有一个输出目录表(export dire
ctory ),那你就会在数据目录表中找到一个为IMAGE_DIRECTORY_ENTRY_EXPORT的指针,并且
它将指向某一个段。
可选头的下面就是“段”(sections)了,通过一个叫做“段头”(section headers)
的结构索引。实际上,段的内容才是你要真正执行的程序,上面介绍的所有的文件头及目录表
等信息就是为了能正确的找到它。
每一个段都有一些有关的标志,例如它包含什么数据(“初始化数据”或其他),它能
否被共享等,及它数据本身的特征。大多数情况下(并不是全部),每个段会被一个或多个目
录表指向,目录表可通过可选头的“数据目录表”的入口找到,就象输出函数表或基址重定位
表。也有没有目录表指向的段,如可执行代码或初始化数据。
整个文件结构如下:
+-------------------+
| DOS-stub |
+-------------------+
| file-header |
+-------------------+
| optional header |
|- - - - - - - - - -|
| |
| data directories |
| |
+-------------------+
| |
| section headers |
| |
+-------------------+
| |
| section 1 |
| |
+-------------------+
| |
| section 2 |
| |
+-------------------+
| |
| ... |
| |
+-------------------+
| |
| section n |
| |
+-------------------+

下面介绍一下相关虚拟地址(Relative Virtual Addresses)
PE格式文件中经常用到RVA,即相关虚拟地址,用在不知道基地址的情况下表示一个内存
地址。它需要加上基地址才能得到线性地址(Linear address)。
例如:假设一个可执行程序调入内存0x400000处并且程序从RVA 0x1560处开始执行。那
么正确的开始地址是0x401560。如果可执行程序调入0x100000处,则开始地址为0x101560。
因为PE文件的每一个段不必按同样的边界对齐方式调入,因此RVA地址的计算变得比较复
杂。例如,在文件中每一个段往往按512个字节的方式对齐,而在内存中可能以4096字节的方
式对齐。这方面的介绍可见下面的“SectionAlignment”、“FileAlignment”。举个例子,
假设你知道一个程序从RVA 0x1560开始执行,你想从那儿反汇编它。你发现内存中的段对齐方
式为4096并且.code段开始于内存RVA 0x1560并且有16384字节长;那么你可以知道RVA 0x156
0在这个段的0x560处。你又发现这个段在文件中以512字节方式对齐并且.code开始于文件0x8
00处,那现在你知道了可执行程序开始于0x800+0x560 = 0xd60处。

二、DOS头(DOS-stub )
众所周知DOS头的概念是从16位的WINDOWS可执行程序(NE格式)中来的,这个部分主要
用在OS/2可执行程序、自解压文档及其他应用程序。在PE格式文件中,大多数程序的这个部分
中只有大约100个字节的代码,只输出一个诸如“this program needs windows NT ”之类的
信息。
你可以通过一个叫做IMAGE_DOS_HEADER的结构来识别一个合法的DOS头。这个结构的头两
个字节一定是“MZ”(#define IMAGE_DOS_SIGNATURE "MZ")。怎么才能找到PE开始的标志呢
?你可以通过该结构的一个叫做“e_lfanew”(offset 60,32bits) 的成员来找到它。在O
S/2及16位WINDOWS程序中这个标志是一个16位的字;在PE程序中,它是一个32位的双字,值为
0x00004550(#define IMAGE_NT_SIGNATURE 0x00004550)。

typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header
WORD e_magic; // Magic number
WORD e_cblp; // Bytes on last page of file
WORD e_cp; // Pages in file
WORD e_crlc; // Relocations
WORD e_cparhdr; // Size of header in paragraphs
WORD e_minalloc; // Minimum extra paragraphs needed
WORD e_maxalloc; // Maximum extra paragraphs needed
WORD e_ss; // Initial (relative) SS value
WORD e_sp; // Initial SP value
WORD e_csum; // Checksum
WORD e_ip; // Initial IP value
WORD e_cs; // Initial (relative) CS value
WORD e_lfarlc; // File address of relocation table
WORD e_ovno; // Overlay number
WORD e_res[4]; // Reserved words
WORD e_oemid; // OEM identifier (for e_oeminfo)
WORD e_oeminfo; // OEM information; e_oemid specific
WORD e_res2[10]; // Reserved words
LONG e_lfanew; // File address of new exe header
} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;

三、文件头(File Header)
通过DOS头,你可以找到一个叫做IMAGE_FILE_HEADER的结构,如下;下面我分别介绍一
下。

typedef struct _IMAGE_FILE_HEADER {
WORD Machine; //0x04
WORD NumberOfSections; //0x06
DWORD TimeDateStamp; //0x08
DWORD PointerToSymbolTable; //0x0c
DWORD NumberOfSymbols; //0x10
WORD SizeOfOptionalHeader; //0x14
WORD Characteristics; //0x16
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;

Machine:表示该程序要执行的环境及平台,现在已知的值如下:
IMAGE_FILE_MACHINE_I386(0x14c)
Intel 80386 处理器以上
0x014d
Intel 80486 处理器以上
0x014e
Intel Pentium 处理器以上
0x0160
R3000(MIPS)处理器,高位在前
IMAGE_FILE_MACHINE_R3000(0x162)
R3000(MIPS)处理器,低位在前
IMAGE_FILE_MACHINE_R4000(0x166)
R4000(MIPS)处理器,低位在前
IMAGE_FILE_MACHINE_R10000(0x168)
R10000(MIPS)处理器,低位在前
IMAGE_FILE_MACHINE_ALPHA(0x184)
DEC Alpha AXP处理器
IMAGE_FILE_MACHINE_POWERPC(0x1f0)
IBM Power PC,低位在前
NumberOfSections:段的个数,段的概念我们将在下面介绍。
TimeDateStamp:文件建立的时间。你可用这个值来区分同一个文件的不同的版本,即使
它们的商业版本号相同。这个值的格式并没有明确的规定,但是很显然的大多数的C编译器都
把它定为从1970.1.1 00:00:00以来的秒数(time_t )。这个值有时也被用做绑定输入目录表
,这将在下面介绍。
注意:一些编译器将忽略这个值。
PointerToSymbolTable 及 NumberOfSymbols:用在调试信息中,我不太清楚它们的用途
,不过发现它们总为0。
SizeOfOptionalHeader:可选头的长度(sizeof IMAGE_OPTIONAL_HEADER)你可以用它
来检验PE文件的正确性。
Characteristics:是一个标志的集合,其中大部分的位用在目标文件(OBJ)或库文件
(LIB)中:
Bit 0 (IMAGE_FILE_RELOCS_STRIPPED):置1表示文件中没有重定向信息。每个段都
有它们自己的重定向信息。这个标志在可执行文件中没有使用,在可执行文件中是用一个叫做
基址重定向目录表来表示重定向信息的,这将在下面介绍。
Bit 1 (IMAGE_FILE_EXECUTABLE_IMAGE):置1表示该文件是可执行文件(也就是说
不是一个目标文件或库文件)。
Bit 2 (IMAGE_FILE_LINE_NUMS_STRIPPED):置1表示没有行数信息;在可执行文件
中没有使用。
Bit 3 (IMAGE_FILE_LOCAL_SYMS_STRIPPED):置1表示没有局部符号信息;在可执行
文件中没有使用。
Bit 4 (IMAGE_FILE_AGGRESIVE_WS_TRIM):
Bit 7 (IMAGE_FILE_BYTES_REVERSED_LO)
Bit 15 (IMAGE_FILE_BYTES_REVERSED_HI):表示文件的字节顺序如果不是机器所期
望的,那么在读出之前要进行交换。在可执行文件中它们是不可信的(操作系统期望按正确的
字节顺序执行程序)。
Bit 8 (IMAGE_FILE_32BIT_MACHINE):表示希望机器为32位机。这个值永远为1。
Bit 9 (IMAGE_FILE_DEBUG_STRIPPED):表示没有调试信息,在可执行文件中没有使
用。
Bit 10 (IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP):置1表示该程序不能运行于可移
动介质中(如软驱或CD-ROM)。在这种情况下,OS必须把文件拷贝到交换文件中执行。
Bit 11 (IMAGE_FILE_NET_RUN_FROM_SWAP):置1表示程序不能在网上运行。在这种
情况下,OS必须把文件拷贝到交换文件中执行。
Bit 12 (IMAGE_FILE_SYSTEM):置1表示文件是一个系统文件例如驱动程序。在可执
行文件中没有使用。
Bit 13 (IMAGE_FILE_DLL):置1表示文件是一个动态链接库(DLL)。
Bit 14 (IMAGE_FILE_UP_SYSTEM_ONLY):表示文件被设计成不能运行于多处理器系
统中。

四、可选头(Optional Header)
文件头下面就是可选头,这是一个叫做IMAGE_OPTIONAL_HEADER的结构。它包含很多关于
PE文件定位的信息。下面分别介绍:
typedef struct _IMAGE_OPTIONAL_HEADER {
//
// Standard fields.
//
WORD Magic; //0x18
BYTE MajorLinkerVersion; //0x1a
BYTE MinorLinkerVersion; //0x1b
DWORD SizeOfCode; //0x1c
DWORD SizeOfInitializedData; //0x20
DWORD SizeOfUninitializedData; //0x24
DWORD AddressOfEntryPoint; //0x28
DWORD BaseOfCode; //0x2c
DWORD BaseOfData; //0x30
//
// NT additional fields.
//
DWORD ImageBase; //0x34
DWORD SectionAlignment; //0x38
DWORD FileAlignment; //0x3c
WORD MajorOperatingSystemVersion; //0x3e
WORD MinorOperatingSystemVersion; //0x40
WORD MajorImageVersion; //0x42
WORD MinorImageVersion; //0x44
WORD MajorSubsystemVersion; //0x46
WORD MinorSubsystemVersion; //0x48
DWORD Win32VersionValue; //0x4c
DWORD SizeOfImage; //0x50
DWORD SizeOfHeaders; //0x54
DWORD CheckSum; //0x58
WORD Subsystem; //0x5c
WORD DllCharacteristics; //0x5e
DWORD SizeOfStackReserve; //0x60
DWORD SizeOfStackCommit; //0x64
DWORD SizeOfHeapReserve; //0x68
DWORD SizeOfHeapCommit; //0x6c
DWORD LoaderFlags; //0x70
DWORD NumberOfRvaAndSizes; //0x74
IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
} IMAGE_OPTIONAL_HEADER, *PIMAGE_OPTIONAL_HEADER;

Magic:这个值好象总是0x010b。
MajorLinkerVersion及MinorLinkerVersion:链接器的版本号,这个值不太可靠。
SizeOfCode:可执行代码的长度。
SizeOfInitializedData:初始化数据的长度(数据段)。
SizeOfUninitializedData:未初始化数据的长度(bss段)。
AddressOfEntryPoint:代码的入口RVA地址,程序从这儿开始执行。
BaseOfCode:可执行代码起始位置,意义不大。
BaseOfData:初始化数据起始位置,意义不大。
ImageBase:载入程序首选的RVA地址。这个在址可被Loader改变。
SectionAlignment:段加载后在内存中的对齐方式。
FileAlignment:段在文件中的对齐方式。
MajorOperatingSystemVersion及MinorOperatingSystemVersion:操作系统版本,Load
er并没有用它。
MajorImageVersion及MinorImageVersion:程序版本。
MajorSubsystemVersion及MinorSubsystemVersion:子系统版本号,这个域系统支持;
例如:如果程序运行于NT下,子系统版本号如果不是4.0的话,对话框不能显示3D风格。
Win32VersionValue:这个值好象总是为0。
SizeOfImage:程序调入后占用内存大小(字节),等于所有段的长度之和。
SizeOfHeaders:所有文件头的长度之和,它等于从文件开始到第一个段的原始数据之间
的大小。
CheckSum:校验和。它仅用在驱动程序中,在可执行文件中可能为0。它的计算方法Mic
rosoft不公开,在imagehelp.dll中的CheckSumMappedFile()函数可以计算它。
Subsystem:NT子系统,可能是以下的值:
IMAGE_SUBSYSTEM_NATIVE (1)
不需要子系统。用在驱动程序中。
IMAGE_SUBSYSTEM_WINDOWS_GUI(2)
WIN32 graphical程序(它可用AllocConsole()来打开一个控制台,但是不能在
一开始自动得到)。
IMAGE_SUBSYSTEM_WINDOWS_CUI(3)
WIN32 console程序(它可以一开始自动建立)。
IMAGE_SUBSYSTEM_OS2_CUI(5)
OS/2 console程序(因为程序是OS/2格式,所以它很少用在PE)。
IMAGE_SUBSYSTEM_POSIX_CUI(7)
POSIX console程序。
Windows95程序总是用WIN32子系统,所以只有2和3是合法的值。
DllCharacteristics:Dll状态。
SizeOfStackReserve:保留堆栈大小。
SizeOfStackCommit:启动后实际申请的堆栈数,可随实际情况变大。
SizeOfHeapReserve:保留堆大小。
SizeOfHeapCommit:实际堆大小。
LoaderFlags:好象没有用。
NumberOfRvaAndSizes:下面的目录表入口个数,这个值也不可靠,你可用常数IMAGE_N
UMBEROF_DIRECTORY_ENTRIES来代替它,值好象总等于16。
DataDirectory:是一个IMAGE_DATA_DIRECTORY数组,数组元素个数为IMAGE_NUMBEROF_
DIRECTORY_ENTRIES,结构如下:
typedef struct _IMAGE_DATA_DIRECTORY {
DWORD VirtualAddress;
DWORD Size;
} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;
VirtualAddress:起始RVA地址。
Size:长度。
每一个目录表代表以下的值:
IMAGE_DIRECTORY_ENTRY_EXPORT (0)
IMAGE_DIRECTORY_ENTRY_IMPORT (1)
IMAGE_DIRECTORY_ENTRY_RESOURCE (2)
IMAGE_DIRECTORY_ENTRY_EXCEPTION (3)
IMAGE_DIRECTORY_ENTRY_SECURITY (4)
IMAGE_DIRECTORY_ENTRY_BASERELOC (5)
IMAGE_DIRECTORY_ENTRY_DEBUG (6)
IMAGE_DIRECTORY_ENTRY_COPYRIGHT (7)
IMAGE_DIRECTORY_ENTRY_GLOBALPTR (8)
IMAGE_DIRECTORY_ENTRY_TLS (9)
IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG (10)
IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT (11)
IMAGE_DIRECTORY_ENTRY_IAT (12)

❼ U盘PE里放什么格式的系统文件

U盘复PE中可以放GHO, ISO 两种格式的系统文制件,如果你是用“大白菜U盘制作”做成的U盘启动盘,在它的U盘文件夹中就专门有二个文件夹,一个是放GHO文件,一个是放ISO文件,GHO文件可以通过手动GHOST进行系统还原,而ISO文件的可以通过“大白菜U盘启动盘”自动的“ONEKEY(GHOST安装器1.4 4 30)”来一键还原系统。(如下图)

第一种GHO文件的:手动GHOST还原图:

❽ PE格式的pe的具体结构

如下所示(经过简化的,具体的可以查看winnt.h,不同字长的结构,其实大体一样的)。
几个宏定义:
typedef unsigned long DWORD;
typedef unsigned short WORD;
typedef unsigned char BYTE; typedef struct _IMAGE_DOS_HEADER
{
WORD e_magic; //魔术数字,所有MS-DOS兼容的可执行文件都将此值设为0X5A4D(MZ)
WORD e_cblp; //文件最后页的字节数
WORD e_cp; //文件页数
WORD e_crlc; //重定义元素个数
WORD e_cparhdr; //头部尺寸,以段落为单位
WORD e_minalloc; //所需的最小附加段
WORD e_maxalloc; //所需的最大附加段
WORD e_ss; //初始的SS值(相对偏移量)
WORD e_sp; //初始的SP值
WORD e_csum; //校验和
WORD e_ip; //初始的IP值
WORD e_cs; //初始的CS值(相对偏移量)
WORD e_lfarlc; //重分配表文件地址
WORD e_ovno; //覆盖号
WORD e_res[4]; //保留字
WORD e_oemid; //OEM标识符(相对e_oeminfo)
WORD e_oeminfo; //OEM信息
WORD e_res2[10]; //保留字
DWORD e_lfanew; //新exe头部的文件地址
}IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER; #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; PE文件头后是节表,在winnt.h下如下定义
typedef struct _IMAGE_SECTION_HEADER
{
//IMAGE_SIZEOF_SHORT_NAME=8
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];//节表名称,如“.text”
union
{
DWORD PhysicalAddress;//物理地址
DWORD VirtualSize;//真实长度,这两个值是一个联合结构,可以使用其中的任何一个,//一般是节的数据大小
} Misc;
DWORD VirtualAddress;//RVA
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;

阅读全文

与pe文件格式示意图相关的资料

热点内容
好看的qq密码 浏览:293
安卓唯一标识有哪些 浏览:243
win10ime 浏览:271
手机号大数据保护停机是什么意思 浏览:81
两个苹果手机怎么隔空投送app 浏览:903
ps修改有褶皱的文件 浏览:417
javadbfreader 浏览:307
苹果手机数字代码是什么 浏览:66
驱动程序顺序安装脚本 浏览:665
word文件里怎样查重 浏览:219
mx5系统基带版本 浏览:184
ntlea全域通win10 浏览:171
qq怎么查看别人的收藏 浏览:135
地震三参数matlab程序 浏览:57
怎样给优盘文件加密软件 浏览:7
收拾文件有哪些小妙招 浏览:431
pdf文件去底网 浏览:253
win10重装系统需要格式化c盘吗 浏览:424
路由器trx文件 浏览:655
淘宝店铺数据包怎么做 浏览:195

友情链接