GreenHandX1h 2016.3.31

来源:互联网 发布:利达华信主板数据备份 编辑:程序博客网 时间:2024/06/02 22:49

学无止境,气有浩然但是我真的很不爱学习好烦人啊


尽管我很不爱学习但是我今天必须要搞明白一个事情
那就是电脑pE文件到底是由什么构成的啊!!
搞不清楚这个我根本没法读程序 !!!!

接下来的时间里我会把我理解了的还有我不理解的统统记录在这个博客当中这就当是一个引序吧wtf。顺便如果有别人看到了这些东西,能不能告诉我这样学习写代码是不是真的有用= =

那么首先winpe他是由哪几部分组成的呢?

  1. 他肯定有个自己的pe标志。那么讲道理的话,他前面就有个dos头(当然了所有文件都有这么一个64字节的dos头,传说是为了兼容早期的操作系统,当然他也被我们用于检测是否是一个标准的Pe文件)(在他的后面有个dos stub一个不知名的鸡肋未知东西之所以这么称呼是因为我不知道他到底是干嘛用的反正我没有用到)
    //判断是否是PE文件结构
    //首先检验文件头部的第一个字是否是PRIMAGE_DOS_SIGNATURE
    //然后定位PE头,如果PE头符合IMAGE_NT_SIGNATURE则可以判断是有效的PE文件
    //经过检验没有任何问题
  2. 有了标志之后PE文件系统就应该做一些正事儿了,那么就是PE 头(PE HEADER)那么问题来了,PE头到底干了什么正经的事情呢?我根据别人的论述发现,它主要记载了一些概括性的信息,比如说OptionHeader啦还有段的个数啊,还有Characteristics(他的功能是记录并区别该PE文件是可执行文件还是DLL文件)其中最重要的当然要说OptionHeader具体的OptionHeader我是如何学习的我想留待明天来解决吧
  3. 有了PE脑袋了那么我们自然是需要骨头跟血肉,那么什么是骨头呢?那就是Section table中文名字叫做节表,PE文件最主要的东西自然是节了,那么我们一个PE文件中如何去定位每个节的位置跟定义每个节的属性呢?那么我们就用到了这个节表这样一个结构紧跟在PE头后面充当骨头,它包括了每一个section的属性偏移位置,其中的具体属性留待明天进行书写吧嘻嘻嘻嘻嘻嘻嘻,这个段表对于我们写程序定位具体的程序入口起着至关重要的作用。
  4. 有了骨头长在骨头上的肉自然就有,那就是PE文件中最最最最最最重要的section部分,我们写的代码啦数据啦都被记录在section当中,每一个section都有一个头部和一个数据部分组成

如果让我画一个图来表示的话呢应该大体上是这样子的
PE文件结构

今天吐槽到此为止。学习真的好累明天要做的工作安排如下

  1. 好好学习PE头中各个重要部分,尤其是OptionHeader
  2. 好好学习段表什么virtualsize啦,什么vitualaddress啦,什么PointerToRawdata啦等等等等等这些长度一定要搞明白
  3. 好好学习如何在一个表中添加我们需要添加的东西等等。。。

革命尚未成功,同志仍需努力


22:06分的修正 上图存在或多或少的问题所以我转载别人的一张图=0=为了让自己加深理解
别人的图图图图图我来借鉴一下

0 0