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