我想看看DLL的(可能编译的不同机器)是否相同.要做到这一点,我正在加载DLL并计算MD5,这对于在不同机器(但具有相同源)的DLL失败.这似乎是由于在编译时添加的其他元数据(如有人提到的
here).
我想到了反向工程整个DLL,看看代码是否匹配,但是我有两个问题:
>我只能找到这样做的工具,我似乎找不到一个C#库或类似的东西,我需要做的.
>我不是100%肯定如果反编译的源将在源编译不同的机器上相同.
解决方法
你可能是对的 – 它可以是元数据.我认为这不一定是最可能的可能性.
DLL的不同之处在于它们可能针对不同版本的.NET或可能的MONO进行编译.
不保证反编译DLL将产生相同的代码,即使它们是从同一个源编译的;实际上,考虑到编译器的优化性质,有一个微小的理论(但存在的)机会,稍微不同的源可以编译到同一个可执行文件 – 通常,一个循环将被展开 – 也就是转化为顺序的,非循环的指令 – 这将导致内存使用或cpu时间的节省.
如果程序员手动展开循环并重新编译,这是编译器一直在做的优化 – presto,具有相同输出的两个不同的源.
一个更好的问题将是您希望通过比较两个DLL来学习.如果这是严格的学习,那是非常棒的,值得赞扬 – 但是,你需要做的一些有意义的研究的知识量是相当高的.您可能通过学习一般,更适用的C#/.net技术来找到更好的结果.