刚开始忘了占楼了,到最后再编辑吧。
图片附件: 游客没有浏览图片的权限,请
登录 或
注册
这是从书里偷来的一个PE结构的总的图示。
希望对PE格式感兴趣想学习的朋友 能把这个图记住。节名就不用记了。
前面有段代码:
if((tou.e_magic == IMAGE_DOS_SIGNATURE) &&
(biaozhi == IMAGE_NT_SIGNATURE))
printf("PE文件\n");
IMAGE_DOS_HEADER结构对我们来说有2个重要字段
偏移0x000处的 e_magic
和偏移0x03c处的 e_lfanew
上面的代码就是根据这2个字段的内容来判断该文件是否是PE格式的文件。
它们的值都被头文件define成常量了,可以在VC里直接查看之。
DOS stub 结构基本没什么用,现在一般就是作为DOS时代的残留 在DOS方式下作
为可执行部分负责显示一些提示信息。当然,也可以加以利用,这不属我们的学
习范围。
+0x03c e_lfanew
: Int4B
DOS头结构的最后一个字段偏移为3c,这个字段大小为 Int4B,那么我们可知
DOS stub开始偏移为0x040,而e_lfanew字段内容就是一个4字节的指针,它指向
了PE文件真正的开始地址,这个真正的开始地址以一个双字结构为标志,
内容是50 45,即上面代码里的被预定义过的IMAGE_NT_SIGNATURE。