the art of disassembly chapter01---lesson1--02
来源:互联网 发布:淘宝传说红包 编辑:程序博客网 时间:2024/05/24 15:38
现在来详细的学习一下PE文件头吧,下面再次给出PE文件头的结构:
IMAGE_NT_HEADERS STRUCT
Signature dd ?
FileHeader IMAGE_FILE_HEADER <>
OptionalHeader IMAGE_OPTIONAL_HEADER32<>
IMAGE_NT_HEADERS ENDS
Signature 双字字段是PE文件头的标志,值为PE,0,0
FileHeader 字段为一个结构。OptionalHeader也是一个结构,我们将在下面的内容中来详细的了解这两个结构。
IMAGE_FILE_HEADER的结构定义如下:
IMAGE_FILE_HEADER STRUCT
Machine word ?
NumberOfSections word ?
TimeDatStamp dd ?
PointerToSymbolTable dd ?
NumberOfSymbols dd ?
SizeOfOptionalHeader word ?
Characteristics word ?
IMAGE_FILE_HEADRE ENDS
下面给出结构中各个字段的具体含义:
字段名 含义
Machine 此文件的运行平台,如果是Intel平台,此值是IMAGE_FILE_MACHINE_I386(14CH)。
此字段通常来讲对我们来说没有多大的意义,除非一个用处就是,可以修改此字段的值来使windows
绝执行一个文件
NumberOfSections 文件中节的数目。如果我们增加或是删除了文件中的节的话,我们就得修改此字段的值
TimeDataStamp 文件创建的时间。对我们没有用
PointerToSymbolTable 供 调试用的
NumberOfSymbols 供高度用的
SizeOfOptionalSize 以下IMAGE_OPTIONAL_HEADER32结构的大小。必须设置成一个有效值
Characteristics 文件的属性,比如表明此文件是一个EXE文件还是一个DLL文件
一般来说,只有三个字段对我们有用处,Machine NumberOfSections 及Characterstics。Machine 与Characteristics的值一般不去修改他,我们可以使用NumberOfSections来枚举所有的节.
为了举例说明NumerOfSections r的用法, 让我们先小小的偏离一下主题来看看节表的内容。
节表是一个结构数组,每一个结构包含一个节的信息。如果文件中有三个节,那个对应的这个数组的元素即为3,同时,NumberOfSection的值也为3,节表中各个元素所描绘的节的信息与节在文件中的排列顺序相对应。我们可以通过NumberOfSections这个字段来得到文件中有几个节。你可能会想,用节表中最后一个元素以全0作为数组的结尾来得到数组的长度,就如对字符串的处理那样。实际上,windows本身也是这么干的,如果你把NumberOfSections 的值设置为比其原来的值更高的话,Windows也可以正常的运行此文件。由观察,Windows使用NumberOfSections的值,并检查每个结构,看结构是否全为0,如果全为0就中止对节的检索,如果不是,则继续直到NumberOfSections中指定的值为止。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
OK,现在我们继续我们的学习,现在来看看IMAGE_OPTIONAL_HEADER32 这个结构
IMAGE_OPTIONAL_HEADER32 包含了31个字段,有一些是非常重要的,有一些对我们一点用处都没有。现在我们就仅仅来看一些对我们有用的字段。
字段 函数
AddressOfEntryPoint 程序入口点的RVA。程序将从此处开始执行。如果你想改变程序第一条被执行的指令,你可以修改此值为一个指向将要被执行的
指令的新RVA
BaseImage 程序的优先装载地址。如果此地址已被其他的模块占据,则程序将被装载到其他的地址空间中
SectionAlignment 节在内存中的对齐粒度。比如,如果此值是4096(1000h),则意味着,每一个节的起始地址必须是4096的倍数,
如果第一个节在地址空间401000h处,它的大小写是10字节,那么下一个节的起始地址也必须是402000h.
FileAlignment 节在文件中的对齐粒度,比如,如果此值是512(200h),每个节的起始必须为512的倍数。如果第一个节在文件偏移200h
处,其大小只有10bytes,下一个节的开始地址必须在文件偏移的400h处。
SizeOfImage 内存中整个PE文件的大小,其值是在根据SectionAligment对齐后,所有文件头+节的大小之和。
SizeOfHeaders 所有文件头的大小+节表的大小。即磁盘文件的大小减去所有节的大小即得此值。当时,你也可以将此值当作第一个节在磁盘文件 中的偏移值。
DataDirectory IMAGE_DATA_DIRECTORY结构数组,每一个结构给出了一个重要数据结构的RVA,如导入地址表。
- the art of disassembly chapter01---lesson1--02
- the art of disassembly chapter01-----lesson1--03
- art of disassembly-------chapter01--lesson1----04
- the art of disassembly charpter01---lesson1---01
- art of disassembly---chapter01---lesson2
- art of disassembly----chapter01---lesson3
- art of disassembly----chapter01----lesson9--Opcodes and Mnemonics---02
- art of disassembly---chapter01---lesson6---Link lists
- art of disassembly----chapter01----lesson11---how is a disassembler working----02
- art of disassembly----chapter01----lesson9--Opcodes and Mnemonics---01
- art of disassembly----chapter01----lesson9--Opcodes and Mnemonics---03
- art of disassembly----chapter01----lesson9--Opcodes and Mnemonics---04
- art of disassembly----chapter01----lesson11---how is a disassembler working----01
- art of disassembly----chapter01----lesson11---how is a disassembler working----03
- Disassembly of the MBR
- The Art of Electronics 02
- The abstract of (chapter01 to chapter03)
- The Art of Java
- 如何释放已删除的InnoDB磁盘空间
- JSP中对复选框checkbox的取值
- 学习Java需要达到的25个目标
- Powerdesigner的PDM(物理数据模型)生成数据库及逆向工程(将现有的数据库生成PDM)
- 黑马程序员----SqlServer数据库关键字与常用函数
- the art of disassembly chapter01---lesson1--02
- 在大容量数据集中查找前N个数的算法
- 黑马程序员----导入的学习
- 人生中十个重要的健康伴侣
- Android中的布局方式之 框架布局管理器
- JSP EL表达式详细介绍
- 常见的海量数据处理方法
- jstree 刷新一个leafnode
- Android多媒体分析(二)MediaStore