Visual Studio: 没有反汇编可用

4
我想在已混淆的 .Net 程序上运行 Visual Studio 调试器。(这是我的程序 - 我不是试图破解别人的程序。)
当我使用 "System.Diagnostics.Debugger.Break()" 编译程序,或者将调试器附加到正在运行的进程时,调试器会显示 "无可用源代码"。我理解这一点 - 没有与混淆版本的程序相对应的源代码。但是当我点击 "显示反汇编" 时,它显示一个带有 "没有可用的反汇编" 的反汇编窗口。
为什么?有什么建议可以让反汇编工作吗?
在调试选项下,我确实勾选了 "启用地址级调试" 和 "如果源代码不可用则显示反汇编"。
谢谢。
编辑
只是为了尝试更好地解释一下...
所涉及的程序是我自己的程序,而使用的混淆程序也是我自己的程序。混淆程序运行 ILDAsm.exe,修改 ILAsm 代码,然后运行 ILAsm.exe。
我的混淆显然引入了问题,因此程序不再正确工作。为了了解为什么它不起作用,我想跟踪它。但由于某种原因,Visual Studio 调试器显示 "没有可用的反汇编",然后我就什么都做不了。(当非混淆程序在 Visual Studio 下运行时,可以打开反汇编窗口并显示预期的信息。只有混淆版本会出现这个问题。)
编辑 2
我无法找到答案,但现在我有了一种解决方法。
我安装了 WinDbg 并确认它可以附加到我的混淆程序,并且至少可以单步执行它并在反汇编窗口中显示当前执行位置。但我以前从未使用过 WinDbg,它看起来有点令人生畏。
我还按照几个地方看到的建议加载了 sos.dll 到 WinDbg 中。也许那会有所帮助。
但我猜我最终会做的是在程序中添加大量临时日志语句,以便在它不工作的地方周围获得一些理解。

1
这是我的程序,那么你应该有源代码。调试它? - Mitch Wheat
不,我的问题是我的混淆方式使程序以非明显的方式变得不可用。如果我能跟踪混淆后的程序并查看它在哪里出现问题,那将更容易弄清楚。 - RenniePet
请参考以下两个关于编程的问题: http://stackoverflow.com/questions/5670626/which-c-method-names-should-not-be-obfuscated 和 http://stackoverflow.com/questions/5761202/is-it-ok-to-remove-property-statements-from-ilasm-files-for-production-use - RenniePet
RenniePet:你确定混淆导致了你的问题吗? - Mitch Wheat
1个回答

4

好的,我碰巧发现了自己做错的事情。

正如我在第一次编辑问题时提到的那样,我的混淆是通过运行ILDAsm.exe进行的,修改ILAsm语句,然后运行ILAsm.exe。结果是我错过了在ILAsm.exe运行时的/Debug选项。因此,即使我的Visual Studio构建是调试版本,运行时的JIT转换也是发布/优化转换。

使用在ILAsm.exe上指定的/Debug选项,我得到了一个PDB文件,当Visual Studio调试器连接到我的程序时,我可以获得IL源代码显示,并且如果我要求的话,还可以获得反汇编显示!所以现在一切都很好!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接