10

似乎您可以使用 Relector 和 Debugger 的混搭来调试任何 .NET 应用程序,而根本不需要源代码。这可能吗?有没有人见过这个?

4

7 回答 7

5

Reflector的Deblector插件允许您直接从 Reflector 进行调试。

于 2008-09-20T07:18:32.887 回答
4

我很久以前尝试过这个,但没有成功。从那时起,Reflector 有了很大的改进,所以我想今天它可能是可能的。

如果你仔细想想,它实际上有点可怕。有人可以反编译您的应用程序并获得完整代码,然后对其进行修改并分发他们自己的版本。所有这些都不是开源的。但话又说回来,这就是“他们”创建混淆器的原因。

于 2008-09-20T04:55:51.920 回答
3

我找不到链接,但有人确实使用反射器源来编译可以逐步通过的 1.1 框架的调试版本。我尝试了 2.0 框架,发现错误太多,值得我花时间。

如果您想尝试这个,请从FileDisassembler 之类的插件开始。在我对此的简短经验中,我发现有一些错误需要修复,但还不错。

对于中小型库,这种方法应该是非常可行的。

于 2008-09-20T05:05:32.473 回答
3

Reflector Pro 可以让您做到这一点!

于 2010-04-14T08:49:01.090 回答
1

不,您需要属于您尝试调试的应用程序的符号文件 (.PDB) 文件。

Reflector 允许您从 IL 转换为可读的 .NET 代码,但它仅保持含义,而不是开发人员编写的确切代码。因此,即使您拥有 PDB 和 Reflector 的源代码,它也无法匹配调试。

我想您可以使用反射器的源输出来创建一个 .NET 项目并生成您自己想要调试的程序集版本。虽然这通常是一个真正的痛苦,但对于 .NET 框架,Microsoft 会发布调试信息以供任何感兴趣的人使用。

我记得有一次在 Reflector 中有一个用于调试的插件,但我永远无法让它工作。

配置 Visual Studio 以调试 .NET Framework 源代码
MSDN:PDB 文件

于 2008-09-20T05:22:11.357 回答
1

我以前看过并做过。我用它来向我的老板展示我们的应用程序没有像他想象的那样受到保护。拿了一个 DLL,得到了源代码,然后砰——他几乎心脏病发作了。

在某些情况下 .Net Reflector 会发生故障,但很难做到——我知道,因为我已经积极尝试过。好的混淆器会使代码变得如此难以管理/不可读(比如重载“a”函数以根据参数执行大量不同的操作)以至于查看源代码对你没有好处,但你仍然可以调试——祝你好运出了什么事。

于 2008-09-20T06:38:57.693 回答
0

在更大更复杂的应用程序中这是可能的,但实际上并不实用,特别是当使用了许多更新的结构(如 lambda 和初始化程序)时(你会得到一大堆包含美元符号的变量名,例如必须手动修复的 CS$4$0000) . 即使是简单的 switch 语句也会在 Reflector 中导致一些非常丑陋的意大利面条代码,其中充满了 goto 语句。

我有更多的运气去编译到 MSIL 并在调试模式下重新编译。然后,您可以在 IL 文件中放置断点并使用 VS 中所有常用的调试器功能。MSIL 一开始看起来有点吓人,但你很快就掌握了窍门。

这篇优秀的文章解释了如何做到这一点:http: //www.codeproject.com/KB/dotnet/Debug_Framework_Classes.aspx

于 2008-09-20T05:08:59.703 回答