我有一个我经常使用的程序,它是用 .NET 制作的。该程序有一个非常烦人的小错误,并且找不到该应用程序的开发人员。
我在反射器中找到了问题的位置,只想在这里添加一个 if 语句,然后重新编译程序。
最简单的方法是什么?
我曾尝试在反射器中使用导出功能,但它似乎并不完美。例如,很多 using-directives 都丢失了,并且来回转换为 int 的枚举也没有正确导出。我相信我可以通过一些工作来解决这个问题,但我想知道是否有更简单的方法可以做到这一点。
更新:通过这样做解决了它:
该程序是单个文件可执行文件
- 使用 C#-view 查找反射器中的错误。然后切换到 IL-view 以查看您应该在第 5 步中查找的内容。
- 使用 ildasm 打开要更改的程序
- 按转储并选择一个空文件夹,默认设置对我有用。
- 在此文件夹中找到 .il 文件并使用任何文本编辑器打开
- 找到步骤 1 中的代码。
- 用新代码替换它,在我的情况下,我只需用简单的返回(IL_0000:ret)替换函数的所有内容。我不认为所有的修复都会这么容易。
- 在步骤 3 中的文件夹中打开命令窗口
- 运行 ilasm,我还必须包含原始 exe 中的一些资源。这些是使用 ildasm 自动输出的。我像这样使用这个 ilasm "C:\Windows\Microsoft.NET\Framework\v2.0.50727\ilasm.exe" test.il /resource=test.res /output=FixedProgram.exe
完毕!我现在只使用了固定程序几分钟,但它似乎像以前一样工作,除了错误:)
我还遇到了应用程序设置的一些问题。在%appdata%\ProgramName中有一个名为ProgramName.exe_Url_qa5i3p42aomuvoxpuxuficvbmngksgjs的文件夹,其中存储了所有设置。我的新可执行文件创建了一个像这样的新文件夹,最后带有不同的随机字母并使用默认设置。要复制您之前使用的设置,只需将旧文件夹的所有内容复制到新文件夹即可。