gpt4 book ai didi

c# - 从 C# DLL 动态获取代码

转载 作者:可可西里 更新时间:2023-11-01 09:11:05 25 4
gpt4 key购买 nike

我想看看 DLL(可能在不同机器上编译)是否相同。为此,我正在做的是加载 DLL 并计算 MD5,这因 DLL 在不同机器上失败(但具有相同的源)而失败。这似乎是由于在编译时添加了其他元数据(正如有人提到的 here )。

我想对整个 DLL 进行逆向工程,看看代码是否匹配,但是,我有两个问题:

  • 我只能找到执行此操作的工具,我似乎找不到 C# 库或类似的东西来满足我的需要。
  • 我不能 100% 确定反编译的源代码在不同机器上编译的源代码是否相同。

如有任何提示、提示和指点,我们将不胜感激。

最佳答案

您可能是对的 - 它可能是元数据。不过,我认为这不一定是最有可能的可能性。

DLL 不同的另一个原因可能是它们是针对不同版本的 .NET 或 MONO 编译的。

不能保证反编译 DLL 会产生相同的代码,即使它们是从相同的源代码编译的;事实上,鉴于编译器的优化特性,存在微小的、理论上(但现存的)机会,即稍微不同的源代码可以编译成相同的可执行文件——通常,一个循环将被展开——也就是说,变成顺序的、非循环的指令- 当这会节省内存使用或 CPU 时间时。

如果程序员手动展开循环并重新编译,那是编译器一直在进行的优化 - 转瞬之间,两个不同的源具有相同的输出。

更好的问题是您希望通过比较这两个 DLL 了解什么。如果它完全是为了学习,那就太棒了,值得称赞——但是,你需要的知识量是相当高的,你需要对它进行有意义的研究。通过学习通用的、更适用的 C#/.net 技术,您可能会找到更好的结果。

关于c# - 从 C# DLL 动态获取代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12049955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com