#PE结构
DOS Header
重点关注0x3c,其中存放了的地址偏移为 P E 0000 P E 00 00 PE0000。DOS stub后面跟的是NT头,
这个头的一个始是一个字母PE后面跟两个字节的0作为签名。
NT头
通过0x3f偏移,我们再移四个字节,后面就是NT头,
值得关注的有
- machine 一般而言,个人电脑现在都是64位的intel或者amd的cpu。如果你编译32位的程序则
则为0x014c,而64位的为0x8664。 - NumberOfSections,Section的个数
- NumberOfSymbols,符号的个数
4.PointerToSymbolTable,符号表的位置
NT头占用20个字节。
可选头
之所以叫可选,是因为在目标文件(.obj)中并不包含可选头,只在镜像文件(.exe)中包含可选头。
而32位和64位程序,其可选头大小是不同的。可选头紧跟NT头。
NT头分为3个部份
-
标准域 PE32占28个字节,PE32+占24个字节
-
windows 专用域 PE32点用68字节,PE32+占用88字节
-
数据目录 可变,大小不确定。
-
magic 0x10b和前面的0x014c在一起混,0x20b和0x8664在一起混。一个表示PE32,一个表示PE32+。