笔者在某安全公司实习,第一天被要求了解PE结构,好吧,因为基础不扎实,经过一天的时间了解的啥都不是,,,受到了导师的特殊关照,推荐了我一本没推荐给别人的书--Windows32位汇编程序(罗云彬著)嘿嘿,匿名感谢导师,,,清明三天的PE之旅。
1.1PE文件的结构
pe就是在windows下最常用的可执行文件格式,在pe文件中代码,已经初始化的数据,资源和重定位信息等数据被按照属性分类放在不同的section(简称节)中,每个节的属性和位置等信息用一个IMAGE_SECTION_HEADER结构来描述,所有的IMAGE_SECTION_HEADER结构组成一个节表(Section table),节表数据在PE文件中被放在所有节数据的前面,由于数据是按照属性在节中放置的,不同用途但是属性相同的数据(如导入表,导出表等吧。。。可能被放在同一个节中),所以PE结构还用一系列的数据目录结构IMAGE_DATA_DIRECTORY来分别来指明这些数据的位置。
数据目录表和其他描述文件属性的数据合在一起称为PE头文件,PE头文件被放置在节和节表的前面,
为了与DOS系统的文件格式相容又加上了包括IMAGE_DOS_HEADER结构和DOS Stub的DOS部分
由以上共同组成了PE文件,结构如表所示
4.节数据 | 。。。 | 由不同属性数据组成的不同节 | 文件尾部
| | | | | | | | | | | |
文件头部 |
.reloc | |||
.rsrc | |||
.data | |||
.text | |||
3.节表 | n x IMAGE_SECTION_HEADER 结构 | 顺序排列的节表 | |
2.PE头文件 | 16 x IMAGE_DATA_DIRECTORY 结构 | 数据目录列表 | |
IMAGE_OPTIONAL_HEADER 结构 | IMAGE_NT_HEADER | ||
IMAGE_FILE_HEADER 结构 | PE文件表头 | ||
“pe”,0,0 | PE文件头标志 | ||
1.DOS头文件 | DOS Stub | DOS块 | |
IMAGE_DOS_HEADER结构 | DOS MZ头文件 |
下面开始分块做笔记了