-2

我的目标是反编译 C# 库并将其与 Github 中同一库的源代码进行比较。我想研究给定的源代码(反编译后)是否等于 Github 中的源代码。

我已经使用 ILSpy 来尝试实现这个目标。我已经下载并反编译了库“FluentScheduler”(v 5.5.1) - Nuget 链接:https ://www.nuget.org/packages/FluentScheduler/

我将给定的源代码(在我的例子中,我使用 MonthUnit.cs 文件)与 Github 上的相同源代码(同样版本)进行了比较。

Github 链接:

我注意到代码非常相似,但不完全相似,例如:

我们可以看到ILSpy生成的源代码和Github上的源代码的区别

有什么办法可以使用 ILSpy conf 来删除不必要的括号?单线?使它类似于具有完全匹配的 Github 源代码?如果不是,我是否应该使用另一个工具来反编译文件并产生与 Github 相同的结果?

非常感谢!

4

2 回答 2

1

有什么办法可以使用 ILSpy conf 来删除不必要的括号?单线?使它类似于具有完全匹配的 Github 源代码?

不,那里没有。当你反编译它时,不需要的东西(例如空格格式或不需要在最终程序集中的东西,如冗余语句)将不存在。

您可以做的是使用相同的格式化程序,在源代码和反编译结果上积极地强制执行特定样式(实际上并不重要) 。那应该让你更接近。但它可能不会 100% 完美。

于 2021-06-14T09:22:36.437 回答
0

您可以将 GitHub 上的代码编译为 .dll,然后使用 ILSpy 反编译这两个 .dll,并比较两个反编译结果。

确保您始终为两个 .dll 使用调试/发布版本;并且调试符号 (.pdb) 始终存在于两个或两个 .dll 中。

这样,反编译器可以在多种编写相同代码的方式(格式、控制流排列、变量名……)之间进行选择的所有内容都应该看起来相同。

请注意,如果两个 .dll 使用不同的编译器版本编译,您可能仍然会得到一些微不足道的差异,因为 IL 中的细微差异可能会导致 ILSpy 在反编译期间做出不同的选择。

于 2021-09-21T14:18:01.010 回答