PE复习笔记PE头解析之DOS头
1.什么是PE头?PE分很多数据块, 但是任何一个PE都有一个起点就是PE头,其中包括PE的所有信息,如图
图中是PE头的大致结构, 我会跟大家一一讲解
2.DOS头
{:10_269:}大致如图片所示, 大家不要被这么多的变量吓到{:10_266:}, (学过C和C++应该知道WORD 代表两个字节,DWORD 代表四个字节)但是DOS头中实际重要的变量就只有两个, e_magic 和 e_lfanew。
e_magic : MZ标志(大端存储在内存中是 5A4D), MZ貌似是发明PE格式的人名缩写
e_lfanew : PE NT头的偏移
我们知道 PE在文件中和内存中的对齐可能不一致,文件中可能是0x200, 内存中是0x1000, 但是PE数据块中,数据不一定能占用0x200或0x1000的大小,所以多余的都是用0填充,就像C中字符串以0结尾的原理一样。
接下来带大家看一看看PE在文件中的样子,如图
红圈,圈起来的地方分别是e_magic和e_lfanew
现在可能有人会疑惑了为什么DOS头和NT头不是连续在一起的,而是用e_lfanew变量标明所在的地方{:5_94:}
那我们就来看看DOS头和NT头之间是什么吧!{:10_254:}
从上面的图片来看e_lfanew是20 01 00 00 但不要忘记在windows中是小端存储,所以要反过来读取内容, 为 00 00 01 20,那么NT头在文件(硬盘)中开始地方就是120h,我们来找找吧。{:10_327:}
找到了120h的地方左下角, 中间红色圈起来的数据是什么看到右上角的英文了吗?{:10_305:}This program cannot be run in DOS mod(此程序不能在DOS mod中运行),感情这一块都是该PE在DOS系统中的说明啊, 当PE在DOS系统中运行便会弹出该串英文。{:10_327:}
大家仔细想想, 换个角度{:10_334:}这块数据只有在DOS系统中才会运行...代表平常系统是用不到这一块数据的, 我们可以写入一些自己的数据,嘿嘿嘿{:10_256:}, 至于如何写入数据以后大概会和大家介绍。
页:
[1]