Mono.塞西尔负责分支机构等的选址
本文关键字:机构 分支 Mono | 更新日期: 2023-09-27 18:07:26
这个问题可能看起来很奇怪,但它很简单-我的观点是,如果我在反编译的代码中有一个"goto" (brtrue等),如示例
br IL_0003
call *****
IL_0003: ret
,我在后面添加了一个命令****调用将顶部的br像它应该的那样返回到该代码。
是Cecil自己做还是我必须处理所有的分支?:/修复它们并不难,但如果塞西尔不这样做,那么我根本不会开始这个项目,我没有时间(或知识)先进的IL魔法:P
(是的,我知道它不会是IL_0003,它只是一个例子)
是的,Cecil会为你更新分支。
唯一需要注意的情况是分支是短形式分支的情况。如果你注入太多指令,它可能会溢出。
有一个非常简单的方法来处理这个问题。在注入代码之前,只需从monoc . cecil中调用扩展方法SimplifyMacros。岩石,像这样:
method.Body.SimplifyMacros ();
这将扭转br。
当你完成注入代码时,只需调用:
method.Body.OptimizeMacros ();
是相反的操作,也就是说,它会尝试将br变成br。