一、 pe文件结构。
pe文件被称为可移植的执行体是portable execute的全称,常见的exe、dll、ocx、sys、com都是pe文件,pe文件是微软windows操作系统上的程序文件(可能是间接被执行,如dll),portable 是指对于不同的windows版本和不同的cpu类型上pe文件的格式是一样的,当然cpu不一样了,cpu指令的二进制编码是不一样的。只是文件中各种东西的布局是一样的。
在下面关于结构的定义中,word 表示变量大小为2个字节,dword表示变量大小是4个字节。
1.1 pe文件的结构。
pe文件有着固定的结构,分为五个部分,如下:
1:dos mz header(dos文件头) 一个image_dos_header结构,大小为64字节。
2:dos stub(dos加载模块) 没有固定大小。
3:pe header(pe文件头)一个image_nt_headers结构,大小为节。
4:section table(节表)一个image_section_header结构数组,数组大小依据节而定,如果pe文件有5个节,则数组大小为5。
5:sections(节或段)没有固定大小,可以有多个节。
1.2 dos文件头和dos加载模块。
pe文件的一二部分完全是为了程序能在dos运行下时给出一个提示。 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;//初始的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]; 保留字。
long e_lfanew;//新exe头部的文件地址。
image_dos_header, *pimage_dos_header;
dos文件头和dos加载模块在 windows下几乎已经没有什么作用了。只要了解image_dos_header里的e_lfanew成员(偏移61h~63h),这个成员指明了 image_nt_headers(pe文件头)在pe文件中的偏移量(位置)。
1.3 pe文件头。
pe文件头是一个image_dos_header结构,该结构定义及成员意义如下:
typedef struct image_nt_headers{
dwoed signature; /文件头标志:"pe\0\0",占4字节。
mage_file_header fileheader; /文件物理分布的信息,占20字节。
image_optional_header32 optionalheader; /pe文件逻辑分布的信息,占节。
image_nt_headers32, *pimage_nt_headers32;
在这个结构中,又有两个结构,即mage_file_header结构类型与image_optional_header32结构类型,这两个结构的定义如下:
先是说 struct mage_file_header的定义及成员意义:
typedef struct mage_file_header{
word machine;//表示该程序要执行的环境及平台,0x14c表示intel 80386处理器以上 0x014d表示intel 80486 处理器以上。
wordnumberofsections;//指明pe文件最后一部分有多少个节,同时也指明了pe文件第四部分数组的大小。
dword timedatestamp;//文件建立的时间。
dword pointertosymboltable;//用在调试信息中,用途不太明确,不过它们的值总为0。
dword numberofsymbols;//用在调试信息中,用途不太明确,不过它们的值总为0。
wordsizeofoptionalheader;//可选头的长度,即sizeof( image_optional_header),可以用它来检验pe文件的正确性。
wordcharacteristics;//是一个标志的集合,其大部分位用于obj文件或lib文件中。(obj文件既是目标文件,一般是程序编译后的二进制文件,再通过链接器和资源文件链接就成exe文件了。obj文件只给出了程序的相对地址;)
image_file_header, *pimage_file_header;
下面是struct image_optional_header32结构的定义及成员意义:
typedef struct image_optional_header32{
word magic;//值是0x010b或者267,作用未知。
byte majorlinkerversion;
byte minorlinkerversion;//这两个变量是链接器的版本号,随windowswindow nt build 438配套的windows nt sdk包含的链接器版本是2.39(十六进制为2.27)。
dwordsizeofcode;//可执行**的长度。
dwordsizeofinitializeddata;//初始化数据的长度(数据段)
dwordsizeofuninitializeddata;//未初始化数据的长度(bss段)
dword addressofentrypoint;//**的入口rva地址,应用程序从这儿开始执行,常称为程序的原入口点oep(original entry point)
dword baseofcode;//可执行**起始位置。
dword baseofdata;//初始化数据起始位。
*以上的部分是该结构的标准域,所谓标准域,就是和unix可执行文件的coff格式所公共的部分,下面部分的成员是属于附加域*/
dword imagebase;//载入程序首选的rva地址。
dword sectionalignment;//规定了装载到内存时段能够占据的最小空间数量——就是说,段是关于sectionalignment对齐的。
dword filealignment;//段在文件中的对齐方式。
wordmajoroperatingsystemversion; /操作系统主版本号, 通常对windows nt 1.0而言,这个值被设为1。
woed minoroperatingsystemversion; /操作系统次版本号,通常对windows nt 1.0而言,这个值被设为0。
word majorimageversion; /应用程序主版本号。
word minorimageversion; /应用程序次版本号。
word majorsubsystemversion; /表示windows nt win32子系统主版本号。
word minorsubsystemversion; /表示windows nt win32子系统的次版本号。
dword win32versionvalue;//这个值总是为0
dword sizeofimage;//程序调入后占用内存大小(字节),等于所有段的长度之和。
dword sizeofheaders;//所有文件头长度之和,它等于从文件开始到第一个段的原始数据之间的大小。包括ms-dos头部、pe文件头部、pe可选头部以及pe段头部。文件中所有的段实体就开始于这个位置。
dword checksum;//校验和,仅用在驱动程序中, 用来在装载时验证可执行文件的。
word subsystem; /一个标明可执行文件所期望的子系统的枚举值。
word dllcharacteristics;//dll状态, 用来表示一个dll映像是否为进程和线程的初始化及终止包含入口点的标记。
dword sizeofstackreserve; /保留堆栈大小。
dword sizeofstackcommit; /启动后实际申请的堆栈数,可随实际情况变大。
dword sizeofheapreserve;//保留堆大小。
dword sizeofheapcommit;//实际堆大小。
dword loaderflags;//告知装载器是否在装载时中止和调试,或者默认地正常运行。
dword numberofrvaandsizes;//下面的目录表入口个数,struct image_data_directory
datadirectory[image_numberof_directory_entries];/目录表入口 , 当前的pe文件格式定义了16种可能的数据目录,这之中的11种现在在使用中。
image_optional_header, *pimage_optional_header;
然后是struct image_data_directory这一结构的具体内容:
typedef struct image_data_directory{
dword virtualaddress; /起始rva地址。
dword size;//长度。
image_data_directory, *pimage_data_directory;
上面说明了第三个头——pe文件头的结构,下面说第四部分section table(节表)部分。
总分总结构作文 总结文件
总分汇总报告构作文 雨水带来的天空是灰色,是阴沉的色调。我眯起眼睛仰望天空,看不到一丝的生机。灰灰的天幕也只有在滴滴哒哒落下雨水的衬托下,才能显示出一丝的生气。像一个正在发脾气的孩子一样,雨中的天空有着几多的神秘,天空中云层浓厚,根本看不到深处,看不到它那本来明亮透彻的眼睛。门口的那几棵桃树已经开花...
钢结构工程投标文件完整范本
沧州隆泰迪科技管道 钢结构车间工程施工招标。投。标。书 项目名称 沧州隆泰迪科技管道 投标人 庆云鑫达彩钢钢结构工程 投标文件内容 投标函 商务标部分 技术标部分。日期 二o一三年十月三十一日。一 前言。二 投标函部分。三 企业相关证明复印件及简介。1 企业营业执照。2 企业组织机构 证。3 企业税...
钢结构课程设计节点文件
轻钢门式刚架施工图设计设计时间 8 10 2010 高强度螺栓计算方法 采用方法2,假定中和轴在端板形心。节点设计结果 施工图总剖面数 7当前剖面归并号 1 梁柱连接节点 节点号 1梁端与柱刚接连接。连接构件号 柱1,梁1节点连接形式 1 内力设计值 弯矩m 114.493 剪力v 40.317 k...