论用C语言写一个PE文件解释器(2)

3 篇文章 0 订阅

论用C语言写一个PE文件解释器(2)

前情提要:

在上一篇,我们讲了有关PE文件和文件结构的一些基本概念。这东西其实就是一类结构体。

1、该怎么进行文件解释

这里我们不系统性地做知识的讲解,默认大家至少已经了解了基本的PE文件结构。那么一个PE文件解释器其实就是能够提取文件结构里的各个元素,并按照其应有的意义和格式显示出来。比如我们常用的StudyPE就是PE文件解释器的一种。而文件解释的流程可以简单地分为如下几步:
(1)读取文件数据
(2)显示PE文件头的各个元素
(3)修改特定元素
其中,关键之处在于我们怎么去解释各个元素。前文说了,文件结构其实就是一种结构体。那么在我们读取文件数据到缓冲区之后,我们用一个对应的结构体指针指向缓冲区。或者不读取文件,直接用文件指针,通过对应的结构体来进行元素解读就可以了。而这里有比较关键的一点 – 这种对应的结构体要怎么弄?
当然啦,这不用我们自己定义的,windows在windows.h这个头文件里已经定义好了各个PE文件的结构体,如DOS头 _IMAGE_DOS_HEADER,NT头 _IMAGE_NT_HEADERS,标准头和可选头 _IMAGE_FILE_HEADER _IMAGE_OPTIONAL_HEADER

2、进行编写的准备工作

为了方便讲解,在这里我们的例程将是一个基于控制台的简易PE文件解释器,具有的功能是显示各个元素信息。

(1)想好实现的途径和使用的函数,头文件

这里我想使用文件句柄来锁定文件和读取文件,那么首先用到的头文件和PE结构体一样,都是windows.h,此外我们的输入输出功能和可能的格式控制,内存分配,那么再加上stdio.hstring.htchar.hmalloc.h

(2)简易地确认程序流程,确认必须变量

用文件句柄进行文件读写操作的流程是 ->CreateFile()获取文件句柄-> CreateFileMapping()创建内存映射空间->MapViewOfFile()映射到空间->CloseHandle()free()进行清理工作

然后可以根据各个函数及参数,来确定一些必须变量,比如获取文件句柄需要一个文件路径,一个WIN32_DATA,读写文件用的函数都需要一个缓冲区,以及一个没什么用的指针。这些都可以在开发前进行考虑,此外还可以确认一下其它的细节,比如目录显示的功能函数,报错流程等等。

到这里我们的准备其实差不多了,当然你有心的话可以按照软件工程的一些方法进行更合理地开发,因为我这里只是一个小项目,因此就放上一些我自己的经验谈。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值