啥是PE结构?简单来说,就是将代码和数据按照一定的约定进行存放,为进程的创建做准备。
微软当初在设计PE结构时,目标是设计成多平台的,所以里面很多字段考虑了跨平台因数,当然现在来看,这个跨平台...en..就不用多说啥了。
先来了解一下PE结构的大概情况
IMAGE_DOS_HEADER //DOS头
IMAGE_NT_HEADERS //NT头
DWORD Signature //PE 标志
IMAGE_FILE_HEADER //文件头
IMAGE_OPTIONAL_HEADER //选项头
IMAGE_SECTION_HEADER //数据节区描述 多个
...
IMAGE_SECTION_HEADER
SECTION_DATA //节数据
...
SECTION_DATA
user data //附加数据 不属于PE范畴
上面大致看看分布即可
先来说说选项头,有些视频或者书籍会翻译成可选头,只是需要注意的是这里的IMAGE_OPTION_HEADER是不能省略的,一个字段都不能,只是这个结构是有多种选项的
IMAGE_OPTIONAL_HEADER64 OptionalHeader; //32位
IMAGE_OPTIONAL_HEADER32 OptionalHeader; //64位
IMAGE_ROM_OPTIONAL_HEADER OptionalHeader; //嵌入式
然后再来说一说数据节区,位于NT头后,有几个节数据(理解为数据块即可),就会有对应多少个节区描述。那么描述数据块至少需要两个信息,数据块在哪里(地址),多大(size),