是否可以使.NET CLR忽略某些异常?例如,将仅跳过该抛出操作,然后函数继续运行,就好像什么都没发生?
是否可以执行此操作而无需修改从何处抛出代码?该软件是.NET 4.6.1 WinForms。
原因是由于对具有数千个校验和例程的恶意软件进行了逆向工程,我需要修改MSIL代码并更改校验和,通过dnlib脚本删除所有例程将是非常耗时的任务。如果我可以阻止特定的异常,则可以避免执行此耗时的任务。
编辑:我记得在某些WinForms应用程序中看到“发生了异常,您要继续还是退出?”如果我可以有效地拒绝该异常并继续执行,就好像它从未发生过,那么肯定是我所需要的。
示例: 请注意,我不是在编写代码。我正在用dnspy编辑一个已编译的exe,所以我不能轻易更改代码,我必须手动编辑MSIL字节代码。
public void Test(){
throw new ArgumentException("ignore this");
MessageBox.Show("Successfully ignored exception");
}
答案 0 :(得分:1)
您无法以所需的方式“忽略”异常。但是,如果要遍历例程,则总是可以跳过引发该异常的一个迭代……
while(condition)
{
try
{
// your iteration
}
catch (Exception)
{
/* don't do a catch, so it will jump back to your while statement and just
try the next one */
}
}
这应该具有您想要的效果,因为它只会忽略可能会阻止程序运行的迭代。 希望这会有所帮助!
编辑:
您可以反编译代码并从此处更改源代码。看看GEOCHET的答案:
答案 1 :(得分:0)
您显然可以在Catch中放入if检查,以对特定异常进行自定义功能-
try
{
// function which you will operate
}
catch (Exception ex)
{
if (ex is StackOverflowException) //(Type your exception type here)
{
//log this if you want
}
else
{
throw; //or handle as per your requirement
}
}