2023-05-23
工具
00
请注意,本文编写于 283 天前,最后修改于 282 天前,其中某些信息可能已经过时。

目录

引言
IL 指令集列表

引言

汇总一下所有的 .NET IL 指令,以及它们的名称、操作码值、堆栈转换行为和描述。

作为反编译IL代码时的查询字典。

IL 指令集列表

以下内容来自微软官方文档,通过百度翻译API翻译为中文。

指令英文描述中文描述
AddAdds two values and pushes the result onto the evaluation stack.将两个值相加,并将结果推送到计算堆栈中。
Add_OvfAdds two integers, performs an overflow check, and pushes the result onto the evaluation stack.将两个整数相加,执行溢出检查,并将结果推送到计算堆栈上。
Add_Ovf_UnAdds two unsigned integer values, performs an overflow check, and pushes the result onto the evaluation stack.将两个无符号整数值相加,执行溢出检查,并将结果推送到计算堆栈上。
AndComputes the bitwise AND of two values and pushes the result onto the evaluation stack.计算两个值的逐位“与”,并将结果推送到计算堆栈上。
ArglistReturns an unmanaged pointer to the argument list of the current method.返回指向当前方法的参数列表的非托管指针。
BeqTransfers control to a target instruction if two values are equal.如果两个值相等,则将控制权转移到目标指令。
Beq_STransfers control to a target instruction (short form) if two values are equal.如果两个值相等,则将控制转移到目标指令(缩写)。
BgeTransfers control to a target instruction if the first value is greater than or equal to the second value.如果第一个值大于或等于第二个值,则将控制权转移到目标指令。
Bge_STransfers control to a target instruction (short form) if the first value is greater than or equal to the second value.如果第一个值大于或等于第二个值,则将控制权转移到目标指令(缩写)。
Bge_UnTransfers control to a target instruction if the first value is greater than the second value, when comparing unsigned integer values or unordered float values.在比较无符号整数值或无序浮点值时,如果第一个值大于第二个值,则将控制权转移到目标指令。
Bge_Un_STransfers control to a target instruction (short form) if the first value is greater than the second value, when comparing unsigned integer values or unordered float values.在比较无符号整数值或无序浮点值时,如果第一个值大于第二个值,则将控制权转移到目标指令(缩写)。
BgtTransfers control to a target instruction if the first value is greater than the second value.如果第一个值大于第二个值,则将控制权转移到目标指令。
Bgt_STransfers control to a target instruction (short form) if the first value is greater than the second value.如果第一个值大于第二个值,则将控制转移到目标指令(缩写)。
Bgt_UnTransfers control to a target instruction if the first value is greater than the second value, when comparing unsigned integer values or unordered float values.在比较无符号整数值或无序浮点值时,如果第一个值大于第二个值,则将控制权转移到目标指令。
Bgt_Un_STransfers control to a target instruction (short form) if the first value is greater than the second value, when comparing unsigned integer values or unordered float values.在比较无符号整数值或无序浮点值时,如果第一个值大于第二个值,则将控制权转移到目标指令(缩写)。
BleTransfers control to a target instruction if the first value is less than or equal to the second value.如果第一个值小于或等于第二个值,则将控制权转移到目标指令。
Ble_STransfers control to a target instruction (short form) if the first value is less than or equal to the second value.如果第一个值小于或等于第二个值,则将控制转移到目标指令(缩写)。
Ble_UnTransfers control to a target instruction if the first value is less than or equal to the second value, when comparing unsigned integer values or unordered float values.在比较无符号整数值或无序浮点值时,如果第一个值小于或等于第二个值,则将控制权转移到目标指令。
Ble_Un_STransfers control to a target instruction (short form) if the first value is less than or equal to the second value, when comparing unsigned integer values or unordered float values.在比较无符号整数值或无序浮点值时,如果第一个值小于或等于第二个值,则将控制权转移到目标指令(缩写)。
BltTransfers control to a target instruction if the first value is less than the second value.如果第一个值小于第二个值,则将控制权转移到目标指令。
Blt_STransfers control to a target instruction (short form) if the first value is less than the second value.如果第一个值小于第二个值,则将控制转移到目标指令(缩写)。
Blt_UnTransfers control to a target instruction if the first value is less than the second value, when comparing unsigned integer values or unordered float values.在比较无符号整数值或无序浮点值时,如果第一个值小于第二个值,则将控制权转移到目标指令。
Blt_Un_STransfers control to a target instruction (short form) if the first value is less than the second value, when comparing unsigned integer values or unordered float values.在比较无符号整数值或无序浮点值时,如果第一个值小于第二个值,则将控制权转移到目标指令(缩写)。
Bne_UnTransfers control to a target instruction when two unsigned integer values or unordered float values are not equal.当两个无符号整数值或无序浮点值不相等时,将控制权转移到目标指令。
Bne_Un_STransfers control to a target instruction (short form) when two unsigned integer values or unordered float values are not equal.当两个无符号整数值或无序浮点值不相等时,将控制转移到目标指令(缩写)。
BoxConverts a value type to an object reference (type O).将值类型转换为对象引用(类型O)。
BrUnconditionally transfers control to a target instruction.无条件地将控制权转移到目标指令。
Br_SUnconditionally transfers control to a target instruction (short form).无条件地将控制转移到目标指令(缩写)。
BreakSignals the Common Language Infrastructure (CLI) to inform the debugger that a break point has been tripped.向公共语言基础结构(CLI)发出信号,通知调试器断点已被触发。
BrfalseTransfers control to a target instruction if value is false, a null reference (Nothing in Visual Basic), or zero.如果值为false、null引用(在Visual Basic中为Nothing)或零,则将控制转移到目标指令。
Brfalse_STransfers control to a target instruction if value is false, a null reference, or zero.如果值为false、null引用或零,则将控制权转移到目标指令。
BrtrueTransfers control to a target instruction if value is true, not null, or non-zero.如果值为true、非null或非零,则将控制转移到目标指令。
Brtrue_STransfers control to a target instruction (short form) if value is true, not null, or non-zero.如果值为true、非null或非零,则将控制转移到目标指令(缩写)。
CallCalls the method indicated by the passed method descriptor.调用由传递的方法描述符指示的方法。
CalliCalls the method indicated on the evaluation stack (as a pointer to an entry point) with arguments described by a calling convention.使用调用约定描述的参数调用计算堆栈上指示的方法(作为指向入口点的指针)。
CallvirtCalls a late-bound method on an object, pushing the return value onto the evaluation stack.调用对象上的后期绑定方法,将返回值推送到计算堆栈上。
CastclassAttempts to cast an object passed by reference to the specified class.尝试将通过引用传递的对象强制转换为指定的类。
CeqCompares two values. If they are equal, the integer value 1 (int32) is pushed onto the evaluation stack; otherwise 0 (int32) is pushed onto the evaluation stack.比较两个值。如果它们相等,则将整数值1(int32)推送到评估堆栈上;否则0(int32)被推送到评估堆栈上。
CgtCompares two values. If the first value is greater than the second, the integer value 1 (int32) is pushed onto the evaluation stack; otherwise 0 (int32) is pushed onto the evaluation stack.比较两个值。如果第一个值大于第二个值,则将整数值1(int32)推送到评估堆栈上;否则0(int32)被推送到评估堆栈上。
Cgt_UnCompares two unsigned or unordered values. If the first value is greater than the second, the integer value 1 (int32) is pushed onto the evaluation stack; otherwise 0 (int32) is pushed onto the evaluation stack.比较两个无符号或无序的值。如果第一个值大于第二个值,则将整数值1(int32)推送到评估堆栈上;否则0(int32)被推送到评估堆栈上。
CkfiniteThrows ArithmeticException if value is not a finite number.如果值不是有限数,则引发ArithmeticException。
CltCompares two values. If the first value is less than the second, the integer value 1 (int32) is pushed onto the evaluation stack; otherwise 0 (int32) is pushed onto the evaluation stack.比较两个值。如果第一个值小于第二个值,则将整数值1(int32)推送到评估堆栈上;否则0(int32)被推送到评估堆栈上。
Clt_UnCompares the unsigned or unordered values value1 and value2. If value1 is less than value2, then the integer value 1 (int32) is pushed onto the evaluation stack; otherwise 0 (int32) is pushed onto the evaluation stack.比较无符号或无序的值value1和value2。如果value1小于value2,则将整数值1(int32)推送到求值堆栈上;否则0(int32)被推送到评估堆栈上。
ConstrainedConstrains the type on which a virtual method call is made.约束对其进行虚拟方法调用的类型。
Conv_IConverts the value on top of the evaluation stack to native int.将计算堆栈顶部的值转换为本机int。
Conv_I1Converts the value on top of the evaluation stack to int8, then extends (pads) it to int32.将求值堆栈顶部的值转换为int8,然后将其扩展(pads)为int32。
Conv_I2Converts the value on top of the evaluation stack to int16, then extends (pads) it to int32.将求值堆栈顶部的值转换为int16,然后将其扩展(pads)为int32。
Conv_I4Converts the value on top of the evaluation stack to int32.将计算堆栈顶部的值转换为int32。
Conv_I8Converts the value on top of the evaluation stack to int64.将计算堆栈顶部的值转换为int64。
Conv_Ovf_IConverts the signed value on top of the evaluation stack to signed native int, throwing OverflowException on overflow.将计算堆栈顶部的有符号值转换为有符号的本机int,在溢出时引发OverflowException。
Conv_Ovf_I_UnConverts the unsigned value on top of the evaluation stack to signed native int, throwing OverflowException on overflow.将计算堆栈顶部的无符号值转换为有符号的本机int,在溢出时引发OverflowException。
Conv_Ovf_I1Converts the signed value on top of the evaluation stack to signed int8 and extends it to int32, throwing OverflowException on overflow.将计算堆栈顶部的有符号值转换为有符号int8,并将其扩展为int32,从而在溢出时引发OverflowException。
Conv_Ovf_I1_UnConverts the unsigned value on top of the evaluation stack to signed int8 and extends it to int32, throwing OverflowException on overflow.将计算堆栈顶部的无符号值转换为有符号int8,并将其扩展为int32,从而在溢出时引发OverflowException。
Conv_Ovf_I2Converts the signed value on top of the evaluation stack to signed int16 and extending it to int32, throwing OverflowException on overflow.将计算堆栈顶部的有符号值转换为有符号int16,并将其扩展为int32,从而在溢出时引发OverflowException。
Conv_Ovf_I2_UnConverts the unsigned value on top of the evaluation stack to signed int16 and extends it to int32, throwing OverflowException on overflow.将计算堆栈顶部的无符号值转换为有符号int16,并将其扩展为int32,从而在溢出时引发OverflowException。
Conv_Ovf_I4Converts the signed value on top of the evaluation stack to signed int32, throwing OverflowException on overflow.将计算堆栈顶部的有符号值转换为有符号int32,在溢出时引发OverflowException。
Conv_Ovf_I4_UnConverts the unsigned value on top of the evaluation stack to signed int32, throwing OverflowException on overflow.将计算堆栈顶部的无符号值转换为有符号int32,在溢出时引发OverflowException。
Conv_Ovf_I8Converts the signed value on top of the evaluation stack to signed int64, throwing OverflowException on overflow.将计算堆栈顶部的有符号值转换为有符号int64,在溢出时引发OverflowException。
Conv_Ovf_I8_UnConverts the unsigned value on top of the evaluation stack to signed int64, throwing OverflowException on overflow.将计算堆栈顶部的无符号值转换为有符号int64,在溢出时引发OverflowException。
Conv_Ovf_UConverts the signed value on top of the evaluation stack to unsigned native int, throwing OverflowException on overflow.将计算堆栈顶部的有符号值转换为无符号本机int,在溢出时引发OverflowException。
Conv_Ovf_U_UnConverts the unsigned value on top of the evaluation stack to unsigned native int, throwing OverflowException on overflow.将计算堆栈顶部的无符号值转换为无符号本机int,在溢出时引发OverflowException。
Conv_Ovf_U1Converts the signed value on top of the evaluation stack to unsigned int8 and extends it to int32, throwing OverflowException on overflow.将求值堆栈顶部的有符号值转换为无符号int8,并将其扩展为int32,从而在溢出时引发OverflowException。
Conv_Ovf_U1_UnConverts the unsigned value on top of the evaluation stack to unsigned int8 and extends it to int32, throwing OverflowException on overflow.将计算堆栈顶部的无符号值转换为无符号int8,并将其扩展为int32,从而在溢出时引发OverflowException。
Conv_Ovf_U2Converts the signed value on top of the evaluation stack to unsigned int16 and extends it to int32, throwing OverflowException on overflow.将求值堆栈顶部的有符号值转换为无符号int16,并将其扩展为int32,从而在溢出时引发OverflowException。
Conv_Ovf_U2_UnConverts the unsigned value on top of the evaluation stack to unsigned int16 and extends it to int32, throwing OverflowException on overflow.将求值堆栈顶部的无符号值转换为无符号int16,并将其扩展为int32,从而在溢出时引发OverflowException。
Conv_Ovf_U4Converts the signed value on top of the evaluation stack to unsigned int32, throwing OverflowException on overflow.将求值堆栈顶部的有符号值转换为无符号int32,在溢出时引发OverflowException。
Conv_Ovf_U4_UnConverts the unsigned value on top of the evaluation stack to unsigned int32, throwing OverflowException on overflow.将计算堆栈顶部的无符号值转换为无符号int32,在溢出时引发OverflowException。
Conv_Ovf_U8Converts the signed value on top of the evaluation stack to unsigned int64, throwing OverflowException on overflow.将求值堆栈顶部的有符号值转换为无符号int64,在溢出时引发OverflowException。
Conv_Ovf_U8_UnConverts the unsigned value on top of the evaluation stack to unsigned int64, throwing OverflowException on overflow.将计算堆栈顶部的无符号值转换为无符号int64,在溢出时引发OverflowException。
Conv_R_UnConverts the unsigned integer value on top of the evaluation stack to float32.将计算堆栈顶部的无符号整数值转换为float32。
Conv_R4Converts the value on top of the evaluation stack to float32.将计算堆栈顶部的值转换为float32。
Conv_R8Converts the value on top of the evaluation stack to float64.将计算堆栈顶部的值转换为float64。
Conv_UConverts the value on top of the evaluation stack to unsigned native int, and extends it to native int.将计算堆栈顶部的值转换为无符号本机int,并将其扩展为本机int。
Conv_U1Converts the value on top of the evaluation stack to unsigned int8, and extends it to int32.将求值堆栈顶部的值转换为无符号int8,并将其扩展为int32。
Conv_U2Converts the value on top of the evaluation stack to unsigned int16, and extends it to int32.将求值堆栈顶部的值转换为无符号int16,并将其扩展为int32。
Conv_U4Converts the value on top of the evaluation stack to unsigned int32, and extends it to int32.将求值堆栈顶部的值转换为无符号int32,并将其扩展为int32。
Conv_U8Converts the value on top of the evaluation stack to unsigned int64, and extends it to int64.将求值堆栈顶部的值转换为无符号int64,并将其扩展为int64。
CpblkCopies a specified number bytes from a source address to a destination address.将指定数量的字节从源地址复制到目标地址。
CpobjCopies the value type located at the address of an object (type &, or native int) to the address of the destination object (type &, or native int).将位于对象地址的值类型(类型&或本机int)复制到目标对象的地址(类型&,或本机整型)。
DivDivides two values and pushes the result as a floating-point (type F) or quotient (type int32) onto the evaluation stack.将两个值相除,并将结果作为浮点(类型为F)或商(类型为int32)推送到计算堆栈中。
Div_UnDivides two unsigned integer values and pushes the result (int32) onto the evaluation stack.对两个无符号整数值进行除法运算,并将结果(int32)推送到计算堆栈上。
DupCopies the current topmost value on the evaluation stack, and then pushes the copy onto the evaluation stack.复制评估堆栈上当前最顶端的值,然后将副本推送到评估堆栈上。
EndfilterTransfers control from the filter clause of an exception back to the Common Language Infrastructure (CLI) exception handler.将控制从异常的filter子句转移回公共语言基础结构(CLI)异常处理程序。
EndfinallyTransfers control from the fault or finally clause of an exception block back to the Common Language Infrastructure (CLI) exception handler.将控制从异常块的fault或finally子句转移回公共语言基础结构(CLI)异常处理程序。
InitblkInitializes a specified block of memory at a specific address to a given size and initial value.将特定地址的指定内存块初始化为给定的大小和初始值。
InitobjInitializes each field of the value type at a specified address to a null reference or a 0 of the appropriate primitive type.将指定地址处的值类型的每个字段初始化为null引用或相应基元类型的0。
IsinstTests whether an object reference (type O) is an instance of a particular class.测试对象引用(类型O)是否是特定类的实例。
JmpExits current method and jumps to specified method.退出当前方法并跳到指定的方法。
LdargLoads an argument (referenced by a specified index value) onto the stack.将参数(由指定的索引值引用)加载到堆栈中。
Ldarg_0Loads the argument at index 0 onto the evaluation stack.将索引0处的参数加载到评估堆栈中。
Ldarg_1Loads the argument at index 1 onto the evaluation stack.将索引1处的参数加载到评估堆栈中。
Ldarg_2Loads the argument at index 2 onto the evaluation stack.将索引2处的参数加载到评估堆栈中。
Ldarg_3Loads the argument at index 3 onto the evaluation stack.将索引3处的参数加载到评估堆栈中。
Ldarg_SLoads the argument (referenced by a specified short form index) onto the evaluation stack.将参数(由指定的缩写索引引用)加载到计算堆栈中。
LdargaLoad an argument address onto the evaluation stack.将参数地址加载到评估堆栈中。
Ldarga_SLoad an argument address, in short form, onto the evaluation stack.将一个简短的参数地址加载到求值堆栈中。
Ldc_I4Pushes a supplied value of type int32 onto the evaluation stack as an int32.将提供的类型为int32的值作为int32推送到计算堆栈上。
Ldc_I4_0Pushes the integer value of 0 onto the evaluation stack as an int32.将整数值0作为int32推送到计算堆栈中。
Ldc_I4_1Pushes the integer value of 1 onto the evaluation stack as an int32.将整数值1作为int32推送到计算堆栈中。
Ldc_I4_2Pushes the integer value of 2 onto the evaluation stack as an int32.将整数值2作为int32推送到求值堆栈上。
Ldc_I4_3Pushes the integer value of 3 onto the evaluation stack as an int32.将整数值3作为int32推送到求值堆栈中。
Ldc_I4_4Pushes the integer value of 4 onto the evaluation stack as an int32.将整数值4作为int32推送到求值堆栈上。
Ldc_I4_5Pushes the integer value of 5 onto the evaluation stack as an int32.将整数值5作为int32推送到求值堆栈中。
Ldc_I4_6Pushes the integer value of 6 onto the evaluation stack as an int32.将整数值6作为int32推送到求值堆栈中。
Ldc_I4_7Pushes the integer value of 7 onto the evaluation stack as an int32.将整数值7作为int32推送到求值堆栈中。
Ldc_I4_8Pushes the integer value of 8 onto the evaluation stack as an int32.将整数值8作为int32推送到求值堆栈中。
Ldc_I4_M1Pushes the integer value of -1 onto the evaluation stack as an int32.将整数值-1作为int32推送到计算堆栈中。
Ldc_I4_SPushes the supplied int8 value onto the evaluation stack as an int32, short form.将提供的int8值作为int32的缩写形式推送到计算堆栈上。
Ldc_I8Pushes a supplied value of type int64 onto the evaluation stack as an int64.将提供的类型为int64的值作为int64推送到计算堆栈上。
Ldc_R4Pushes a supplied value of type float32 onto the evaluation stack as type F (float).将提供的float32类型的值作为类型F(float)推送到评估堆栈上。
Ldc_R8Pushes a supplied value of type float64 onto the evaluation stack as type F (float).将提供的float64类型的值作为类型F(float)推送到评估堆栈上。
LdelemLoads the element at a specified array index onto the top of the evaluation stack as the type specified in the instruction.将指定数组索引处的元素作为指令中指定的类型加载到计算堆栈的顶部。
Ldelem_ILoads the element with type native int at a specified array index onto the top of the evaluation stack as a native int.将指定数组索引处类型为native int的元素作为native int加载到计算堆栈的顶部。
Ldelem_I1Loads the element with type int8 at a specified array index onto the top of the evaluation stack as an int32.将指定数组索引处类型为int8的元素作为int32加载到计算堆栈的顶部。
Ldelem_I2Loads the element with type int16 at a specified array index onto the top of the evaluation stack as an int32.将指定数组索引处类型为int16的元素作为int32加载到计算堆栈的顶部。
Ldelem_I4Loads the element with type int32 at a specified array index onto the top of the evaluation stack as an int32.将指定数组索引处类型为int32的元素作为int32加载到计算堆栈的顶部。
Ldelem_I8Loads the element with type int64 at a specified array index onto the top of the evaluation stack as an int64.将指定数组索引处类型为int64的元素作为int64加载到计算堆栈的顶部。
Ldelem_R4Loads the element with type float32 at a specified array index onto the top of the evaluation stack as type F (float).将指定数组索引处的float32类型的元素作为F(float)类型加载到评估堆栈的顶部。
Ldelem_R8Loads the element with type float64 at a specified array index onto the top of the evaluation stack as type F (float).将指定数组索引处float64类型的元素作为F(float)类型加载到评估堆栈的顶部。
Ldelem_RefLoads the element containing an object reference at a specified array index onto the top of the evaluation stack as type O (object reference).将在指定数组索引处包含对象引用的元素作为类型O(对象引用)加载到计算堆栈的顶部。
Ldelem_U1Loads the element with type unsigned int8 at a specified array index onto the top of the evaluation stack as an int32.将指定数组索引处类型为unsigned int8的元素作为int32加载到计算堆栈的顶部。
Ldelem_U2Loads the element with type unsigned int16 at a specified array index onto the top of the evaluation stack as an int32.将指定数组索引处类型为unsigned int16的元素作为int32加载到计算堆栈的顶部。
Ldelem_U4Loads the element with type unsigned int32 at a specified array index onto the top of the evaluation stack as an int32.将指定数组索引处类型为unsigned int32的元素作为int32加载到计算堆栈的顶部。
LdelemaLoads the address of the array element at a specified array index onto the top of the evaluation stack as type & (managed pointer).将指定数组索引处的数组元素的地址作为类型&(托管指针)加载到评估堆栈的顶部。
LdfldFinds the value of a field in the object whose reference is currently on the evaluation stack.在对象中查找其引用当前位于求值堆栈上的字段的值。
LdfldaFinds the address of a field in the object whose reference is currently on the evaluation stack.在对象中查找其引用当前在求值堆栈上的字段的地址。
LdftnPushes an unmanaged pointer (type native int) to the native code implementing a specific method onto the evaluation stack.将指向实现特定方法的本机代码的非托管指针(类型为native int)推送到计算堆栈上。
Ldind_ILoads a value of type native int as a native int onto the evaluation stack indirectly.将本机int类型的值作为本机int间接加载到计算堆栈中。
Ldind_I1Loads a value of type int8 as an int32 onto the evaluation stack indirectly.将类型为int8的值作为int32间接加载到计算堆栈中。
Ldind_I2Loads a value of type int16 as an int32 onto the evaluation stack indirectly.将类型为int16的值作为int32间接加载到计算堆栈中。
Ldind_I4Loads a value of type int32 as an int32 onto the evaluation stack indirectly.将类型为int32的值作为int32间接加载到计算堆栈中。
Ldind_I8Loads a value of type int64 as an int64 onto the evaluation stack indirectly.将类型为int64的值作为int64间接加载到计算堆栈中。
Ldind_R4Loads a value of type float32 as a type F (float) onto the evaluation stack indirectly.将float32类型的值作为F(float)类型间接加载到求值堆栈上。
Ldind_R8Loads a value of type float64 as a type F (float) onto the evaluation stack indirectly.将float64类型的值作为F(float)类型间接加载到求值堆栈上。
Ldind_RefLoads an object reference as a type O (object reference) onto the evaluation stack indirectly.将对象引用作为类型O(对象引用)间接加载到计算堆栈上。
Ldind_U1Loads a value of type unsigned int8 as an int32 onto the evaluation stack indirectly.将类型为unsigned int8的值作为int32间接加载到求值堆栈中。
Ldind_U2Loads a value of type unsigned int16 as an int32 onto the evaluation stack indirectly.将类型为unsigned int16的值作为int32间接加载到求值堆栈中。
Ldind_U4Loads a value of type unsigned int32 as an int32 onto the evaluation stack indirectly.将类型为unsigned int32的值作为int32间接加载到求值堆栈中。
LdlenPushes the number of elements of a zero-based, one-dimensional array onto the evaluation stack.将基于零的一维数组的元素数推送到求值堆栈上。
LdlocLoads the local variable at a specific index onto the evaluation stack.将特定索引处的局部变量加载到求值堆栈中。
Ldloc_0Loads the local variable at index 0 onto the evaluation stack.将索引0处的局部变量加载到计算堆栈中。
Ldloc_1Loads the local variable at index 1 onto the evaluation stack.将索引1处的局部变量加载到求值堆栈中。
Ldloc_2Loads the local variable at index 2 onto the evaluation stack.将索引2处的局部变量加载到求值堆栈中。
Ldloc_3Loads the local variable at index 3 onto the evaluation stack.将索引3处的局部变量加载到求值堆栈中。
Ldloc_SLoads the local variable at a specific index onto the evaluation stack, short form.将特定索引处的局部变量以缩写形式加载到评估堆栈中。
LdlocaLoads the address of the local variable at a specific index onto the evaluation stack.将特定索引处的局部变量的地址加载到求值堆栈中。
Ldloca_SLoads the address of the local variable at a specific index onto the evaluation stack, short form.将特定索引处的局部变量的地址以缩写形式加载到评估堆栈中。
LdnullPushes a null reference (type O) onto the evaluation stack.将空引用(类型O)推送到求值堆栈上。
LdobjCopies the value type object pointed to by an address to the top of the evaluation stack.将地址指向的值类型对象复制到求值堆栈的顶部。
LdsfldPushes the value of a static field onto the evaluation stack.将静态字段的值推送到求值堆栈上。
LdsfldaPushes the address of a static field onto the evaluation stack.将静态字段的地址推送到计算堆栈上。
LdstrPushes a new object reference to a string literal stored in the metadata.将新对象引用推送到存储在元数据中的字符串文字。
LdtokenConverts a metadata token to its runtime representation, pushing it onto the evaluation stack.将元数据令牌转换为其运行时表示形式,并将其推送到评估堆栈上。
LdvirtftnPushes an unmanaged pointer (type native int) to the native code implementing a particular virtual method associated with a specified object onto the evaluation stack.将指向实现与指定对象关联的特定虚拟方法的本机代码的非托管指针(类型为native int)推送到计算堆栈上。
LeaveExits a protected region of code, unconditionally transferring control to a specific target instruction.退出受保护的代码区域,无条件地将控制权转移到特定的目标指令。
Leave_SExits a protected region of code, unconditionally transferring control to a target instruction (short form).退出受保护的代码区域,无条件地将控制权转移到目标指令(缩写)。
LocallocAllocates a certain number of bytes from the local dynamic memory pool and pushes the address (a transient pointer, type *) of the first allocated byte onto the evaluation stack.从本地动态内存池中分配一定数量的字节,并将第一个分配字节的地址(临时指针,类型*)推送到评估堆栈上。
MkrefanyPushes a typed reference to an instance of a specific type onto the evaluation stack.将对特定类型实例的类型化引用推送到计算堆栈上。
MulMultiplies two values and pushes the result on the evaluation stack.将两个值相乘,并将结果推送到计算堆栈上。
Mul_OvfMultiplies two integer values, performs an overflow check, and pushes the result onto the evaluation stack.将两个整数值相乘,执行溢出检查,并将结果推送到计算堆栈上。
Mul_Ovf_UnMultiplies two unsigned integer values, performs an overflow check, and pushes the result onto the evaluation stack.将两个无符号整数值相乘,执行溢出检查,并将结果推送到计算堆栈上。
NegNegates a value and pushes the result onto the evaluation stack.取一个值的负值并将结果推送到计算堆栈上。
NewarrPushes an object reference to a new zero-based, one-dimensional array whose elements are of a specific type onto the evaluation stack.将对元素为特定类型的新的基于零的一维数组的对象引用推送到计算堆栈上。
NewobjCreates a new object or a new instance of a value type, pushing an object reference (type O) onto the evaluation stack.创建新对象或值类型的新实例,将对象引用(类型O)推送到计算堆栈上。
NopFills space if opcodes are patched. No meaningful operation is performed although a processing cycle can be consumed.如果修补了操作码,则填充空间。尽管可以消耗处理周期,但不执行有意义的操作。
NotComputes the bitwise complement of the integer value on top of the stack and pushes the result onto the evaluation stack as the same type.计算堆栈顶部整数值的逐位补码,并将结果作为同一类型推送到计算堆栈上。
OrCompute the bitwise complement of the two integer values on top of the stack and pushes the result onto the evaluation stack.计算堆栈顶部两个整数值的逐位补码,并将结果推送到求值堆栈上。
PopRemoves the value currently on top of the evaluation stack.删除当前位于评估堆栈顶部的值。
Prefix1This is a reserved instruction.这是一条保留指令。
Prefix2This is a reserved instruction.这是一条保留指令。
Prefix3This is a reserved instruction.这是一条保留指令。
Prefix4This is a reserved instruction.这是一条保留指令。
Prefix5This is a reserved instruction.这是一条保留指令。
Prefix6This is a reserved instruction.这是一条保留指令。
Prefix7This is a reserved instruction.这是一条保留指令。
PrefixrefThis is a reserved instruction.这是一条保留指令。
ReadonlySpecifies that the subsequent array address operation performs no type check at run time, and that it returns a managed pointer whose mutability is restricted.指定后续数组地址操作在运行时不执行类型检查,并指定它返回一个可变性受到限制的托管指针。
RefanytypeRetrieves the type token embedded in a typed reference.检索嵌入在类型化引用中的类型标记。
RefanyvalRetrieves the address (type &) embedded in a typed reference.检索嵌入类型化引用中的地址(类型&)。
RemDivides two values and pushes the remainder onto the evaluation stack.将两个值相除,并将余数推送到求值堆栈上。
Rem_UnDivides two unsigned values and pushes the remainder onto the evaluation stack.将两个无符号值相除,并将余数推送到计算堆栈中。
RetReturns from the current method, pushing a return value (if present) from the callee's evaluation stack onto the caller's evaluation stack.从当前方法返回,将返回值(如果存在)从被调用者的评估堆栈推送到调用者的评估栈。
RethrowRethrows the current exception.重新处理当前异常。
ShlShifts an integer value to the left (in zeroes) by a specified number of bits, pushing the result onto the evaluation stack.将整数值向左(以零为单位)移动指定的位数,将结果推送到计算堆栈上。
ShrShifts an integer value (in sign) to the right by a specified number of bits, pushing the result onto the evaluation stack.将整数值(带符号)向右移动指定的位数,将结果推送到计算堆栈上。
Shr_UnShifts an unsigned integer value (in zeroes) to the right by a specified number of bits, pushing the result onto the evaluation stack.将无符号整数值(以零为单位)向右移动指定位数,将结果推送到计算堆栈上。
SizeofPushes the size, in bytes, of a supplied value type onto the evaluation stack.将提供的值类型的大小(以字节为单位)推送到评估堆栈中。
StargStores the value on top of the evaluation stack in the argument slot at a specified index.将值存储在参数槽中指定索引处的求值堆栈顶部。
Starg_SStores the value on top of the evaluation stack in the argument slot at a specified index, short form.将值存储在参数槽中计算堆栈顶部的指定索引的缩写形式中。
StelemReplaces the array element at a given index with the value on the evaluation stack, whose type is specified in the instruction.将给定索引处的数组元素替换为计算堆栈上的值,该值的类型在指令中指定。
Stelem_IReplaces the array element at a given index with the native int value on the evaluation stack.用计算堆栈上的本机int值替换给定索引处的数组元素。
Stelem_I1Replaces the array element at a given index with the int8 value on the evaluation stack.用计算堆栈上的int8值替换给定索引处的数组元素。
Stelem_I2Replaces the array element at a given index with the int16 value on the evaluation stack.用计算堆栈上的int16值替换给定索引处的数组元素。
Stelem_I4Replaces the array element at a given index with the int32 value on the evaluation stack.用计算堆栈上的int32值替换给定索引处的数组元素。
Stelem_I8Replaces the array element at a given index with the int64 value on the evaluation stack.用计算堆栈上的int64值替换给定索引处的数组元素。
Stelem_R4Replaces the array element at a given index with the float32 value on the evaluation stack.将求值堆栈上给定索引处的数组元素替换为float32值。
Stelem_R8Replaces the array element at a given index with the float64 value on the evaluation stack.将计算堆栈上给定索引处的数组元素替换为float64值。
Stelem_RefReplaces the array element at a given index with the object ref value (type O) on the evaluation stack.将给定索引处的数组元素替换为计算堆栈上的对象引用值(类型O)。
StfldReplaces the value stored in the field of an object reference or pointer with a new value.将存储在对象引用或指针字段中的值替换为新值。
Stind_IStores a value of type native int at a supplied address.将本机int类型的值存储在提供的地址。
Stind_I1Stores a value of type int8 at a supplied address.将类型为int8的值存储在提供的地址中。
Stind_I2Stores a value of type int16 at a supplied address.将类型为int16的值存储在提供的地址中。
Stind_I4Stores a value of type int32 at a supplied address.将类型为int32的值存储在提供的地址。
Stind_I8Stores a value of type int64 at a supplied address.将类型为int64的值存储在提供的地址。
Stind_R4Stores a value of type float32 at a supplied address.在提供的地址中存储float32类型的值。
Stind_R8Stores a value of type float64 at a supplied address.在提供的地址中存储float64类型的值。
Stind_RefStores a object reference value at a supplied address.将对象引用值存储在提供的地址。
StlocPops the current value from the top of the evaluation stack and stores it in the local variable list at a specified index.从评估堆栈的顶部弹出当前值,并将其存储在指定索引处的局部变量列表中。
Stloc_0Pops the current value from the top of the evaluation stack and stores it in the local variable list at index 0.从评估堆栈的顶部弹出当前值,并将其存储在索引0处的局部变量列表中。
Stloc_1Pops the current value from the top of the evaluation stack and stores it in the local variable list at index 1.从评估堆栈的顶部弹出当前值,并将其存储在索引1处的局部变量列表中。
Stloc_2Pops the current value from the top of the evaluation stack and stores it in the local variable list at index 2.从评估堆栈的顶部弹出当前值,并将其存储在索引2处的局部变量列表中。
Stloc_3Pops the current value from the top of the evaluation stack and stores it in the local variable list at index 3.从评估堆栈的顶部弹出当前值,并将其存储在索引3处的局部变量列表中。
Stloc_SPops the current value from the top of the evaluation stack and stores it in the local variable list at index (short form).从评估堆栈的顶部弹出当前值,并将其存储在索引处的局部变量列表中(缩写)。
StobjCopies a value of a specified type from the evaluation stack into a supplied memory address.将指定类型的值从求值堆栈复制到提供的内存地址中。
StsfldReplaces the value of a static field with a value from the evaluation stack.将静态字段的值替换为求值堆栈中的值。
SubSubtracts one value from another and pushes the result onto the evaluation stack.从另一个值中减去一个值,并将结果推送到计算堆栈中。
Sub_OvfSubtracts one integer value from another, performs an overflow check, and pushes the result onto the evaluation stack.从另一个整数值中减去一个,执行溢出检查,并将结果推送到计算堆栈上。
Sub_Ovf_UnSubtracts one unsigned integer value from another, performs an overflow check, and pushes the result onto the evaluation stack.从另一个无符号整数值中减去一个,执行溢出检查,并将结果推送到计算堆栈中。
SwitchImplements a jump table.实现一个跳转表。
TailcallPerforms a postfixed method call instruction such that the current method's stack frame is removed before the actual call instruction is executed.执行后置方法调用指令,以便在执行实际调用指令之前删除当前方法的堆栈帧。
ThrowThrows the exception object currently on the evaluation stack.抛出当前评估堆栈上的异常对象。
UnalignedIndicates that an address currently atop the evaluation stack might not be aligned to the natural size of the immediately following ldind, stind, ldfld, stfld, ldobj, stobj, initblk, or cpblk instruction.指示当前位于评估堆栈顶部的地址可能未与紧接其后的ldid、stind、ldfld、stfld、ldobj、stobj、initblk或cpblk指令的自然大小对齐。
UnboxConverts the boxed representation of a value type to its unboxed form.将值类型的装箱表示形式转换为其未装箱形式。
Unbox_AnyConverts the boxed representation of a type specified in the instruction to its unboxed form.将指令中指定的类型的装箱表示形式转换为其未装箱形式。
VolatileSpecifies that an address currently atop the evaluation stack might be volatile, and the results of reading that location cannot be cached or that multiple stores to that location cannot be suppressed.指定当前位于评估堆栈顶部的地址可能不稳定,并且无法缓存读取该位置的结果,或者无法抑制对该位置的多个存储。
XorComputes the bitwise XOR of the top two values on the evaluation stack, pushing the result onto the evaluation stack.

参考

https://learn.microsoft.com/en-us/dotnet/api/system.reflection.emit.opcodes?view=net-5.0

本文作者:Peter.Pan

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!