Csharp/C#教程:Mono.Cecil是否负责分支机构等位置?分享


Mono.Cecil是否负责分支机构等位置?

那么这个问题可能看起来很奇怪,但很简单 – 我的观点是,如果我在反编译代码中有一个“goto”(brtrue等),例如

br IL_0003 call ***** IL_0003: ret 

然后我在****调用之后添加一个命令,将顶点处的br恢复为应该或该代码。

塞西尔是单独做的还是我必须照顾所有这些分支? :/它不是很难修复它们但是如果Cecil没有那么我根本就不会启动这个项目,我没有时间(或知识)获得高级IL魔法:P

(是的我知道它不会是IL_0003只是例如)

是的,Cecil将为您更新分支机构。

您必须要处理的唯一情况是分支是一个简短forms的分支。 如果注入太多指令,它可能会溢出。

有一种非常简单的方法来处理这个问题。 在注入代码之前,只需从Mono.Cecil.Rocks中调用扩展方法SimplifyMacros,如下所示:

 method.Body.SimplifyMacros (); 

这将把br.s变成br。

当你完成注入代码时,只需调用:

 method.Body.OptimizeMacros (); 

这是相反的操作,也就是说,如果可能的话,它会尝试将br转换为br.s。

上述就是C#学习教程:Mono.Cecil是否负责分支机构等位置?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/953535.html

(0)
上一篇 2021年11月19日
下一篇 2021年11月19日

精彩推荐