gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:02:19 26 4
gpt4 key购买 nike

好吧,这个问题可能看起来很奇怪,但它很简单——我的意思是如果我在反编译代码中有一个“goto”(brtrue 等),比如示例

br IL_0003
call *****
IL_0003: ret

然后我在该 **** 调用之后添加了一个命令,将顶部的 br 按原样或该代码进行 ret。

是 Cecil 自己做还是我必须照顾所有这些分支? :/修复它们并不是很难,但如果 Cecil 不这样做,我就不会开始这个项目,我没有时间(或知识)学习高级 IL 魔法:P

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

最佳答案

是的,Cecil 会为您更新分支。

您唯一需要注意的情况是分支是短形式分支的情况。如果您注入(inject)太多指令,它可能会溢出。

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

method.Body.SimplifyMacros ();

这会将 br.s 变成 br。

当您完成注入(inject)代码后,只需调用:

method.Body.OptimizeMacros ();

这是相反的操作,即如果可能,它会尝试将 br 变成 br.s。

关于c# - Mono.Cecil 是否负责分支机构等位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7267480/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com