CliPeViewer是老刘编写的一个WinForm小程序,能够用来查看托管PE文件中的 各种结构。目前有很多能够查看PE信息的程序,支持.NET的也有。不过, CliPeViewer与他们的最大区别在于,这个小程序更在意原汁原味地暴露一个PE文 件中的内容,尤其是对于文件中的每个结构、每个字段,除了显示了它的值之外 ,还显示出了它在PE文件中的偏移量和原始数据。
坦率地说,CliPeViewer还没有写完。尚欠缺的功能包括:显示IL指令、托管 方法的定义(方法头、异常处理块等),以及对元数据签名的解析。之所以放出 这个不成熟的版本,是因为老刘等不起了。2005年,老刘就开始学习托管PE文件 格式和IL语言,并有想法写这样一个程序,甚至编写了这个程序的最原始版本。
2006年,因为种种原因这件事就放下了。到了2007年,工作之余闲暇时间不少 ,于是又把这一摊子捡了起来。2008年,老刘惊喜地发现,自.NET 2.0以来,不 管CLR怎么进展,编程语言如何进化,但底层的元数据结构似乎一直没发生变化, ECMA-335标准也一直停留在2006年6月的版本。于是老刘发现这件事有搞头,下定 决心要搞一搞。
前不久,看了一些C# 4.0的资料,更加坚定了这种看法。C# 4.0里所有的新功 能,都是.NET 2.0时代就已经提供了的,只是一直没有在上层语言中体现出来。
从2005年到2009年,不短了,结果一个像样的版本也没写出来。先后开了不下 10个项目,名字也改了5、6次了,最后都是不了了之。目前这个CliPeViewer是我 最满意的一个版本,也是打算继续跟进下去的版本。老刘觉得不能等了,等到自 己满意了,.NET兴许都成历史文物了。
这个程序的代码(NB的多次否定句来了)有够烂,但足够简单,却又很多。所 以这里就不放出源代码了,如果实在感兴趣可使用.NET Reflector偷窥。
后面老刘可能会继续修改这个版本,也没准推翻重来。但老刘保证要做的事包 括:1)写一个通用点的XML文件,描述PE文件结构,这样大家(包括老刘自己) 就可以通过编写代码生成器来生成文件结构的定义了。2)让 AndersLiu.CliPe.dll尽可能地为第三方所用。3)写一些文章介绍PE文件格式。
下面截图奉上。