C# 使用Mono.Cecil对if语句进行IL操作

C# 使用Mono.Cecil对if语句进行IL操作,c#,mono,branch,il,C#,Mono,Branch,Il,我有一个有点棘手的问题。 它是关于混淆和控制流的。 我希望软件板上的一些高级程序员能帮助我。:) 假设我有一个非常简单的if语句: 它的Ilcode看起来有点像这样: 我理解代码,直到这里: (很抱歉,由于我的声誉,我还不能发布图片) 有人能帮助我了解分支是如何连接的,以及分支在哪里使用哪个值吗?我对此有点困惑;) 目标是: 正如标题中所提到的,我想用cecil库修改这个ifstatement。 我喜欢注入更多(无效/错误条件,永远不会被调用) 比如: 我必须在哪里添加elseif分支?e

我有一个有点棘手的问题。 它是关于混淆和控制流的。 我希望软件板上的一些高级程序员能帮助我。:) 假设我有一个非常简单的if语句:

它的Ilcode看起来有点像这样:

我理解代码,直到这里:

(很抱歉,由于我的声誉,我还不能发布图片)

有人能帮助我了解分支是如何连接的,以及分支在哪里使用哪个值吗?我对此有点困惑;)


目标是:

正如标题中所提到的,我想用cecil库修改这个ifstatement。 我喜欢注入更多(无效/错误条件,永远不会被调用)

比如:

我必须在哪里添加elseif分支?elseif指令将是什么样的指令? 到底应该在哪里注射呢? 这将如何影响偏移和跳跃? 我提出这个问题的原因是我正在从事的一个关于代码安全性的小项目,也是为了进一步了解ilcode

如果有人在理解我的部分问题时有问题,请随意问我,然后我会更详细地解释。
我很高兴得到建设性的答案:)

不要将代码作为图片发布。您可以使用四个前导空格的降价语法为您格式化代码。谢谢,现在似乎已经修复:)在发布模式下编译可能会有帮助,因为指令会更少。问题第一部分的答案是,它将第一个ceq的结果与0进行比较,如果值不相等,则堆栈上会出现1,如果值相等,则堆栈上会出现0。1会导致第10行的分支转到第18行,而0不会导致分支。是的,但我仍然不确定如何将现有的ifstatement与其他条件进行扩展…?这是一个老问题:但为什么不将您提供的IL与使用修改的构造得到的IL进行比较?
 else if (num == 3422);
// Assign some random value to the variable "num"
 else if (num == 6376); 
// Assign some random value to the variable "num"
 else if (num == 12276); 
// Assign some random value to the variable "num"