作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
好吧,这个问题可能看起来很奇怪,但它很简单——我的意思是如果我在反编译代码中有一个“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/
我有一个包含 JSON 数组的 JSON 文件 测试文件 [ { "Name": "Bob" }, { "Age": "37" }, { "DOB": "12/01/1985"} ] 我想
我是一名优秀的程序员,十分优秀!