如何使用CIL指令conv.r4

How to use CIL instruction conv.r4

今天我开始学习 CIL 代码的工作原理。
我找到了 List of CIL instructions

现在我正在尝试编辑一项功能。 我正在使用 .NET Reflector 和 Reflexil
我想编辑这个功能:

.method family hidebysig instance void SomeFunction(float32 var1, float32 var2, class SomeClassComponent component, class SomeInstanceClassComponent instance, float32 var3) cil managed
{
}

以代码开头:

IL_0000: ldarg.0
IL_0001: ldarg.3
IL_0002: ldarg.1
IL_0003: ldarg.2

我想用硬写值替换 var1。
维基百科说:

conv.r4

转换为 float32,将 F 推入堆栈。

当我尝试对其进行编辑时,我得到了这个:

我的错误在哪里?

正如 Lucas Trzesniewski 在他的评论中所说,您首先需要在堆栈上一个值,conv.r4 指令可以使用.

有关操作数的更深入的描述,请参阅此 msdn link and here is the link conv.r4 操作数,其中指出 "The conv.r4 opcode converts the value on top of the stack to the type specified in the opcode" - 这意味着您有确保堆栈上已经有一个值,并且它是 conv.r4 指令可以使用的正确值。

作为末尾的一些小自我广告 ;) 我写了一些 关于 IL 编程的教程 你可以阅读 here and here。我尝试使用动手实践的方法,以便您通过编程而不只是阅读来理解 IL。