每学习一门新的课程,我都会习惯性的问自已几个问题,为什么要学习它?学习它之后我能干什么?
什么是PE?
为什么要学习PE?
学习完PE我能干什么?
才刚刚开始学习这门课程,对它的理解我也只能停留在表层,但为了记录这个过程及思想起伏的一个状况,我依然把我对它的理解给记录下来。
1.什么是PE?即一个操作系统的可执行文件映射到虚拟内存中的格式,通过学好它我们可以很清楚的知道我们的一个应用程序从硬盘加载到内存(这里说的内存是虚拟的4GB内存),应用程序中的数据与代码分别在哪里,还有这4GB的内存空间它的每一部分分别存放的什么,这一大堆数据当中我们如何找到我们想要的东西,了解它的数据存储方式及对数据的管理。我把这4GB的内存看成一本书,这本书中的汉字达到近43亿,一本书应该不会那么厚只是一个比喻。书中有目录,有章节,每章节中有内容,内容中还有它隐含的内容。那么这么庞大的一本书我该怎么查找到我要的内容?学习PE也就是在学习这本书它的数据组织,它每一章节对应的内容在哪里。学习PE我总觉得应该不会那么简单,那么我们就慢慢尝试。
2.为什么要学习PE?学习PE是为了想更深入的了解一个应用程序,了解它的内存机制及文件处理,更深入的理解标识及结构体。
3.学习完它我能干什么?这个以后再说。
今天学习PE主要是对几个结构体的理解及它们之间的关系,还有就是大概的知道几个名词。
结构体:
IMAGIC_DOS_HEADER (64)
DOS stub
PE signature (PE 标识符) (4)
IMAGIC_FILE_HEADER (20)
IMAGIC_OPTIONAL_HEADER32 (224)
IMAGIC_DATA_DIRECTORY (8)
IMAGIC_SECTION_HEADER (40)
其中:
IMAGIC_NT_HEADERS包含了三部分:PE signature,IMAGIC_FILE_HEADER,IMAGIC_OPTIONAL_HEADER32
关系:
通过IMAGIC_DOS_HEADER 我们可以找到PE signature,也就是