【发布时间】:2008-09-20 04:42:27
【问题描述】:
您似乎可以使用 Relector 和 Debugger 的混搭来调试任何 .NET 应用程序,而根本不需要源代码。这可能吗?有人见过这个吗?
【问题讨论】:
您似乎可以使用 Relector 和 Debugger 的混搭来调试任何 .NET 应用程序,而根本不需要源代码。这可能吗?有人见过这个吗?
【问题讨论】:
Reflector 的 Deblector 插件允许您直接从 Reflector 进行调试。
【讨论】:
我很久以前尝试过,但没有成功。从那时起,Reflector 有了很大的改进,所以我想今天它可能是可能的。
如果你仔细想想,这实际上有点可怕。有人可以反编译您的应用程序并获得完整代码,然后对其进行修改并分发他们自己的版本。所有这些都不是开源的。但话又说回来,这就是“他们”创建混淆器的原因。
【讨论】:
Reflector Pro 可以让您做到这一点!
【讨论】:
我找不到链接,但有人确实使用反射器源来编译可以逐步通过的 1.1 框架的调试版本。我尝试了 2.0 框架,发现错误太多,值得一试。
如果您想尝试这个,请从 FileDisassembler 之类的插件开始。根据我对此的简短经验,我发现有一些错误需要修复,但还不错。
对于中小型库,这种方法应该是非常可行的。
【讨论】:
不,您需要属于您尝试调试的应用程序的符号文件 (.PDB) 文件。
Reflector 允许您从 IL 转换为可读的 .NET 代码,但它只保留含义,而不是开发人员编写的确切代码。因此,即使您拥有 PDB 和 Reflector 的源代码,它也无法匹配调试。
我想您可以使用反射器的源输出来创建一个 .NET 项目并生成您自己想要调试的程序集版本。虽然这通常是一个真正的痛苦,但对于 .NET 框架,Microsoft 会发布调试信息以供任何感兴趣的人使用。
我记得有一次在 Reflector 中有一个用于调试的插件,但我永远无法让它工作。
Configuring Visual Studio to Debug .NET Framework Source Code
MSDN: PDB Files
【讨论】:
我以前见过并做过。我用它来向我的老板展示我们的应用程序没有像他想象的那样受到保护。拿了一个 DLL,得到了源代码,然后砰——他几乎心脏病发作了。
在某些情况下 .Net Reflector 会发生故障,但很难做到——我知道,因为我已经积极尝试过。好的混淆器会使代码变得如此难以管理/不可读(例如重载“a”函数以根据参数执行大量不同的操作)以至于查看源代码对您没有好处,但您仍然可以调试 - 祝您好运搞清楚是怎么回事。
【讨论】:
这在大型更复杂的应用程序中是可能的,但实际上并不实用,尤其是在使用了许多更新的结构(如 lambda 和初始化程序)时(你会得到一大堆包含美元符号的变量名,例如 CS$4$0000手动修复)。即使是简单的 switch 语句也会在 Reflector 中导致一些非常丑陋的意大利面条代码,其中充满了 goto 语句。
我在反编译为 MSIL 并在调试模式下重新编译时获得了更多的运气。然后,您可以在 IL 文件中放置断点并使用 VS 中所有常用的调试器功能。 MSIL 一开始看起来有点吓人,但你很快就掌握了窍门。
这篇优秀的文章解释了如何做到这一点: http://www.codeproject.com/KB/dotnet/Debug_Framework_Classes.aspx
【讨论】: