工具 --- IL指令集解释

引言

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

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

IL 指令集列表

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

指令 英文描述 中文描述
Add Adds two values and pushes the result onto the evaluation stack. 将两个值相加,并将结果推送到计算堆栈中。
Add_Ovf Adds two integers, performs an overflow check, and pushes the result onto the evaluation stack. 将两个整数相加,执行溢出检查,并将结果推送到计算堆栈上。
Add_Ovf_Un Adds two unsigned integer values, performs an overflow check, and pushes the result onto the evaluation stack. 将两个无符号整数值相加,执行溢出检查,并将结果推送到计算堆栈上。
And Computes the bitwise AND of two values and pushes the result onto the evaluation stack. 计算两个值的逐位“与”,并将结果推送到计算堆栈上。
Arglist Returns an unmanaged pointer to the argument list of the current method. 返回指向当前方法的参数列表的非托管指针。
Beq Transfers control to a target instruction if two values are equal. 如果两个值相等,则将控制权转移到目标指令。
Beq_S Transfers control to a target instruction (short form) if two values are equal. 如果两个值相等,则将控制转移到目标指令(缩写)。
Bge Transfers control to a target instruction if the first value is greater than or equal to the second value. 如果第一个值大于或等于第二个值,则将控制权转移到目标指令。
Bge_S Transfers control to a target instruction (short form) if the first value is greater than or equal to the second value. 如果第一个值大于或等于第二个值,则将控制权转移到目标指令(缩写)。
Bge_Un Transfers 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_S Transfers 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. 在比较无符号整数值或无序浮点值时,如果第一个值大于第二个值,则将控制权转移到目标指令(缩写)。
Bgt Transfers control to a target instruction if the first value is greater than the second value. 如果第一个值大于第二个值,则将控制权转移到目标指令。
Bgt_S Transfers control to a target instruction (short form) if the first value is greater than the second value. 如果第一个值大于第二个值,则将控制转移到目标指令(缩写)。
Bgt_Un Transfers 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_S Transfers 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. 在比较无符号整数值或无序浮点值时,如果第一个值大于第二个值,则将控制权转移到目标指令(缩写)。
Ble Transfers control to a target instruction if the first value is less than or equal to the second value. 如果第一个值小于或等于第二个值,则将控制权转移到目标指令。
Ble_S Transfers control to a target instruction (short form) if the first value is less than or equal to the second value. 如果第一个值小于或等于第二个值,则将控制转移到目标指令(缩写)。
Ble_Un Transfers 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_S Transfers 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. 在比较无符号整数值或无序浮点值时,如果第一个值小于或等于第二个值,则将控制权转移到目标指令(缩写)。
Blt Transfers control to a target instruction if the first value is less than the second value. 如果第一个值小于第二个值,则将控制权转移到目标指令。
Blt_S Transfers control to a target instruction (short form) if the first value is less than the second value. 如果第一个值小于第二个值,则将控制转移到目标指令(缩写)。
Blt_Un Transfers 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_S Transfers 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_Un Transfers control to a target instruction when two unsigned integer values or unordered float values are not equal. 当两个无符号整数值或无序浮点值不相等时,将控制权转移到目标指令。
Bne_Un_S Transfers control to a target instruction (short form) when two unsigned integer values or unordered float values are not equal. 当两个无符号整数值或无序浮点值不相等时,将控制转移到目标指令(缩写)。
Box Converts a value type to an object reference (type O). 将值类型转换为对象引用(类型O)。
Br Unconditionally transfers control to a target instruction. 无条件地将控制权转移到目标指令。
Br_S Unconditionally transfers control to a target instruction (short form). 无条件地将控制转移到目标指令(缩写)。
Break Signals the Common Language Infrastructure (CLI) to inform the debugger that a break point has been tripped. 向公共语言基础结构(CLI)发出信号,通知调试器断点已被触发。
Brfalse Transfers control to a target instruction if value is false, a null reference (Nothing in Visual Basic), or zero. 如果值为false、null引用(在Visual Basic中为Nothing)或零,则将控制转移到目标指令。
Brfalse_S Transfers control to a target instruction if value is false, a null reference, or zero. 如果值为false、null引用或零,则将控制权转移到目标指令。
Brtrue Transfers control to a target instruction if value is true, not null, or non-zero. 如果值为true、非null或非零,则将控制转移到目标指令。
Brtrue_S Transfers control to a target instruction (short form) if value is true, not null, or non-zero. 如果值为true、非null或非零,则将控制转移到目标指令(缩写)。
Call Calls the method indicated by the passed method descriptor. 调用由传递的方法描述符指示的方法。
Calli Calls the method indicated on the evaluation stack (as a pointer to an entry point) with arguments described by a calling convention. 使用调用约定描述的参数调用计算堆栈上指示的方法(作为指向入口点的指针)。
Callvirt Calls a late-bound method on an object, pushing the return value onto the evaluation stack. 调用对象上的后期绑定方法,将返回值推送到计算堆栈上。
Castclass Attempts to cast an object passed by reference to the specified class. 尝试将通过引用传递的对象强制转换为指定的类。
Ceq Compares 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)被推送到评估堆栈上。
Cgt Compares 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_Un Compares 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)被推送到评估堆栈上。
Ckfinite Throws ArithmeticException if value is not a finite number. 如果值不是有限数,则引发ArithmeticException。
Clt Compares 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_Un Compares 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)被推送到评估堆栈上。
Constrained Constrains the type on which a virtual method call is made. 约束对其进行虚拟方法调用的类型。
Conv_I Converts the value on top of the evaluation stack to native int. 将计算堆栈顶部的值转换为本机int。
Conv_I1 Converts the value on top of the evaluation stack to int8, then extends (pads) it to int32. 将求值堆栈顶部的值转换为int8,然后将其扩展(pads)为int32。
Conv_I2 Converts the value on top of the evaluation stack to int16, then extends (pads) it to int32. 将求值堆栈顶部的值转换为int16,然后将其扩展(pads)为int32。
Conv_I4 Converts the value on top of the evaluation stack to int32. 将计算堆栈顶部的值转换为int32。
Conv_I8 Converts the value on top of the evaluation stack to int64. 将计算堆栈顶部的值转换为int64。
Conv_Ovf_I Converts the signed value on top of the evaluation stack to signed native int, throwing OverflowException on overflow. 将计算堆栈顶部的有符号值转换为有符号的本机int,在溢出时引发OverflowException。
Conv_Ovf_I_Un Converts the unsigned value on top of the evaluation stack to signed native int, throwing OverflowException on overflow. 将计算堆栈顶部的无符号值转换为有符号的本机int,在溢出时引发OverflowException。
Conv_Ovf_I1 Converts 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_Un Converts 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_I2 Converts 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_Un Converts 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_I4 Converts the signed value on top of the evaluation stack to signed int32, throwing OverflowException on overflow. 将计算堆栈顶部的有符号值转换为有符号int32,在溢出时引发OverflowException。
Conv_Ovf_I4_Un Converts the unsigned value on top of the evaluation stack to signed int32, throwing OverflowException on overflow. 将计算堆栈顶部的无符号值转换为有符号int32,在溢出时引发OverflowException。
Conv_Ovf_I8 Converts the signed value on top of the evaluation stack to signed int64, throwing OverflowException on overflow. 将计算堆栈顶部的有符号值转换为有符号int64,在溢出时引发OverflowException。
Conv_Ovf_I8_Un Converts the unsigned value on top of the evaluation stack to signed int64, throwing OverflowException on overflow. 将计算堆栈顶部的无符号值转换为有符号int64,在溢出时引发OverflowException。
Conv_Ovf_U Converts the signed value on top of the evaluation stack to unsigned native int, throwing OverflowException on overflow. 将计算堆栈顶部的有符号值转换为无符号本机int,在溢出时引发OverflowException。
Conv_Ovf_U_Un Converts the unsigned value on top of the evaluation stack to unsigned native int, throwing OverflowException on overflow. 将计算堆栈顶部的无符号值转换为无符号本机int,在溢出时引发OverflowException。
Conv_Ovf_U1 Converts 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_Un Converts 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_U2 Converts 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_Un Converts 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_U4 Converts the signed value on top of the evaluation stack to unsigned int32, throwing OverflowException on overflow. 将求值堆栈顶部的有符号值转换为无符号int32,在溢出时引发OverflowException。
Conv_Ovf_U4_Un Converts the unsigned value on top of the evaluation stack to unsigned int32, throwing OverflowException on overflow. 将计算堆栈顶部的无符号值转换为无符号int32,在溢出时引发OverflowException。
Conv_Ovf_U8 Converts the signed value on top of the evaluation stack to unsigned int64, throwing OverflowException on overflow. 将求值堆栈顶部的有符号值转换为无符号int64,在溢出时引发OverflowException。
Conv_Ovf_U8_Un Converts the unsigned value on top of the evaluation stack to unsigned int64, throwing OverflowException on overflow. 将计算堆栈顶部的无符号值转换为无符号int64,在溢出时引发OverflowException。
Conv_R_Un Converts the unsigned integer value on top of the evaluation stack to float32. 将计算堆栈顶部的无符号整数值转换为float32。
Conv_R4 Converts the value on top of the evaluation stack to float32. 将计算堆栈顶部的值转换为float32。
Conv_R8 Converts the value on top of the evaluation stack to float64. 将计算堆栈顶部的值转换为float64。
Conv_U Converts the value on top of the evaluation stack to unsigned native int, and extends it to native int. 将计算堆栈顶部的值转换为无符号本机int,并将其扩展为本机int。
Conv_U1 Converts the value on top of the evaluation stack to unsigned int8, and extends it to int32. 将求值堆栈顶部的值转换为无符号int8,并将其扩展为int32。
Conv_U2 Converts the value on top of the evaluation stack to unsigned int16, and extends it to int32. 将求值堆栈顶部的值转换为无符号int16,并将其扩展为int32。
Conv_U4 Converts the value on top of the evaluation stack to unsigned int32, and extends it to int32. 将求值堆栈顶部的值转换为无符号int32,并将其扩展为int32。
Conv_U8 Converts the value on top of the evaluation stack to unsigned int64, and extends it to int64. 将求值堆栈顶部的值转换为无符号int64,并将其扩展为int64。
Cpblk Copies a specified number bytes from a source address to a destination address. 将指定数量的字节从源地址复制到目标地址。
Cpobj Copies 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)复制到目标对象的地址(类型&,或本机整型)。
Div Divides two values and pushes the result as a floating-point (type F) or quotient (type int32) onto the evaluation stack. 将两个值相除,并将结果作为浮点(类型为F)或商(类型为int32)推送到计算堆栈中。
Div_Un Divides two unsigned integer values and pushes the result (int32) onto the evaluation stack. 对两个无符号整数值进行除法运算,并将结果(int32)推送到计算堆栈上。
Dup Copies the current topmost value on the evaluation stack, and then pushes the copy onto the evaluation stack. 复制评估堆栈上当前最顶端的值,然后将副本推送到评估堆栈上。
Endfilter Transfers control from the filter clause of an exception back to the Common Language Infrastructure (CLI) exception handler. 将控制从异常的filter子句转移回公共语言基础结构(CLI)异常处理程序。
Endfinally Transfers control from the fault or finally clause of an exception block back to the Common Language Infrastructure (CLI) exception handler. 将控制从异常块的fault或finally子句转移回公共语言基础结构(CLI)异常处理程序。
Initblk Initializes a specified block of memory at a specific address to a given size and initial value. 将特定地址的指定内存块初始化为给定的大小和初始值。
Initobj Initializes each field of the value type at a specified address to a null reference or a 0 of the appropriate primitive type. 将指定地址处的值类型的每个字段初始化为null引用或相应基元类型的0。
Isinst Tests whether an object reference (type O) is an instance of a particular class. 测试对象引用(类型O)是否是特定类的实例。
Jmp Exits current method and jumps to specified method. 退出当前方法并跳到指定的方法。
Ldarg Loads an argument (referenced by a specified index value) onto the stack. 将参数(由指定的索引值引用)加载到堆栈中。
Ldarg_0 Loads the argument at index 0 onto the evaluation stack. 将索引0处的参数加载到评估堆栈中。
Ldarg_1 Loads the argument at index 1 onto the evaluation stack. 将索引1处的参数加载到评估堆栈中。
Ldarg_2 Loads the argument at index 2 onto the evaluation stack. 将索引2处的参数加载到评估堆栈中。
Ldarg_3 Loads the argument at index 3 onto the evaluation stack. 将索引3处的参数加载到评估堆栈中。
Ldarg_S Loads the argument (referenced by a specified short form index) onto the evaluation stack. 将参数(由指定的缩写索引引用)加载到计算堆栈中。
Ldarga Load an argument address onto the evaluation stack. 将参数地址加载到评估堆栈中。
Ldarga_S Load an argument address, in short form, onto the evaluation stack. 将一个简短的参数地址加载到求值堆栈中。
Ldc_I4 Pushes a supplied value of type int32 onto the evaluation stack as an int32. 将提供的类型为int32的值作为int32推送到计算堆栈上。
Ldc_I4_0 Pushes the integer value of 0 onto the evaluation stack as an int32. 将整数值0作为int32推送到计算堆栈中。
Ldc_I4_1 Pushes the integer value of 1 onto the evaluation stack as an int32. 将整数值1作为int32推送到计算堆栈中。
Ldc_I4_2 Pushes the integer value of 2 onto the evaluation stack as an int32. 将整数值2作为int32推送到求值堆栈上。
Ldc_I4_3 Pushes the integer value of 3 onto the evaluation stack as an int32. 将整数值3作为int32推送到求值堆栈中。
Ldc_I4_4 Pushes the integer value of 4 onto the evaluation stack as an int32. 将整数值4作为int32推送到求值堆栈上。
Ldc_I4_5 Pushes the integer value of 5 onto the evaluation stack as an int32. 将整数值5作为int32推送到求值堆栈中。
Ldc_I4_6 Pushes the integer value of 6 onto the evaluation stack as an int32. 将整数值6作为int32推送到求值堆栈中。
Ldc_I4_7 Pushes the integer value of 7 onto the evaluation stack as an int32. 将整数值7作为int32推送到求值堆栈中。
Ldc_I4_8 Pushes the integer value of 8 onto the evaluation stack as an int32. 将整数值8作为int32推送到求值堆栈中。
Ldc_I4_M1 Pushes the integer value of -1 onto the evaluation stack as an int32. 将整数值-1作为int32推送到计算堆栈中。
Ldc_I4_S Pushes the supplied int8 value onto the evaluation stack as an int32, short form. 将提供的int8值作为int32的缩写形式推送到计算堆栈上。
Ldc_I8 Pushes a supplied value of type int64 onto the evaluation stack as an int64. 将提供的类型为int64的值作为int64推送到计算堆栈上。
Ldc_R4 Pushes a supplied value of type float32 onto the evaluation stack as type F (float). 将提供的float32类型的值作为类型F(float)推送到评估堆栈上。
Ldc_R8 Pushes a supplied value of type float64 onto the evaluation stack as type F (float). 将提供的float64类型的值作为类型F(float)推送到评估堆栈上。
Ldelem Loads the element at a specified array index onto the top of the evaluation stack as the type specified in the instruction. 将指定数组索引处的元素作为指令中指定的类型加载到计算堆栈的顶部。
Ldelem_I Loads 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_I1 Loads the element with type int8 at a specified array index onto the top of the evaluation stack as an int32. 将指定数组索引处类型为int8的元素作为int32加载到计算堆栈的顶部。
Ldelem_I2 Loads the element with type int16 at a specified array index onto the top of the evaluation stack as an int32. 将指定数组索引处类型为int16的元素作为int32加载到计算堆栈的顶部。
Ldelem_I4 Loads the element with type int32 at a specified array index onto the top of the evaluation stack as an int32. 将指定数组索引处类型为int32的元素作为int32加载到计算堆栈的顶部。
Ldelem_I8 Loads the element with type int64 at a specified array index onto the top of the evaluation stack as an int64. 将指定数组索引处类型为int64的元素作为int64加载到计算堆栈的顶部。
Ldelem_R4 Loads 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_R8 Loads 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_Ref Loads 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_U1 Loads 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_U2 Loads 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_U4 Loads the element with type unsigned int32 at a specified array index onto the top of the evaluation stack as an int32. 将指定数组索引处类型为unsigned int32的元素作为int32加载到计算堆栈的顶部。
Ldelema Loads the address of the array element at a specified array index onto the top of the evaluation stack as type & (managed pointer). 将指定数组索引处的数组元素的地址作为类型&(托管指针)加载到评估堆栈的顶部。
Ldfld Finds the value of a field in the object whose reference is currently on the evaluation stack. 在对象中查找其引用当前位于求值堆栈上的字段的值。
Ldflda Finds the address of a field in the object whose reference is currently on the evaluation stack. 在对象中查找其引用当前在求值堆栈上的字段的地址。
Ldftn Pushes an unmanaged pointer (type native int) to the native code implementing a specific method onto the evaluation stack. 将指向实现特定方法的本机代码的非托管指针(类型为native int)推送到计算堆栈上。
Ldind_I Loads a value of type native int as a native int onto the evaluation stack indirectly. 将本机int类型的值作为本机int间接加载到计算堆栈中。
Ldind_I1 Loads a value of type int8 as an int32 onto the evaluation stack indirectly. 将类型为int8的值作为int32间接加载到计算堆栈中。
Ldind_I2 Loads a value of type int16 as an int32 onto the evaluation stack indirectly. 将类型为int16的值作为int32间接加载到计算堆栈中。
Ldind_I4 Loads a value of type int32 as an int32 onto the evaluation stack indirectly. 将类型为int32的值作为int32间接加载到计算堆栈中。
Ldind_I8 Loads a value of type int64 as an int64 onto the evaluation stack indirectly. 将类型为int64的值作为int64间接加载到计算堆栈中。
Ldind_R4 Loads a value of type float32 as a type F (float) onto the evaluation stack indirectly. 将float32类型的值作为F(float)类型间接加载到求值堆栈上。
Ldind_R8 Loads a value of type float64 as a type F (float) onto the evaluation stack indirectly. 将float64类型的值作为F(float)类型间接加载到求值堆栈上。
Ldind_Ref Loads an object reference as a type O (object reference) onto the evaluation stack indirectly. 将对象引用作为类型O(对象引用)间接加载到计算堆栈上。
Ldind_U1 Loads a value of type unsigned int8 as an int32 onto the evaluation stack indirectly. 将类型为unsigned int8的值作为int32间接加载到求值堆栈中。
Ldind_U2 Loads a value of type unsigned int16 as an int32 onto the evaluation stack indirectly. 将类型为unsigned int16的值作为int32间接加载到求值堆栈中。
Ldind_U4 Loads a value of type unsigned int32 as an int32 onto the evaluation stack indirectly. 将类型为unsigned int32的值作为int32间接加载到求值堆栈中。
Ldlen Pushes the number of elements of a zero-based, one-dimensional array onto the evaluation stack. 将基于零的一维数组的元素数推送到求值堆栈上。
Ldloc Loads the local variable at a specific index onto the evaluation stack. 将特定索引处的局部变量加载到求值堆栈中。
Ldloc_0 Loads the local variable at index 0 onto the evaluation stack. 将索引0处的局部变量加载到计算堆栈中。
Ldloc_1 Loads the local variable at index 1 onto the evaluation stack. 将索引1处的局部变量加载到求值堆栈中。
Ldloc_2 Loads the local variable at index 2 onto the evaluation stack. 将索引2处的局部变量加载到求值堆栈中。
Ldloc_3 Loads the local variable at index 3 onto the evaluation stack. 将索引3处的局部变量加载到求值堆栈中。
Ldloc_S Loads the local variable at a specific index onto the evaluation stack, short form. 将特定索引处的局部变量以缩写形式加载到评估堆栈中。
Ldloca Loads the address of the local variable at a specific index onto the evaluation stack. 将特定索引处的局部变量的地址加载到求值堆栈中。
Ldloca_S Loads the address of the local variable at a specific index onto the evaluation stack, short form. 将特定索引处的局部变量的地址以缩写形式加载到评估堆栈中。
Ldnull Pushes a null reference (type O) onto the evaluation stack. 将空引用(类型O)推送到求值堆栈上。
Ldobj Copies the value type object pointed to by an address to the top of the evaluation stack. 将地址指向的值类型对象复制到求值堆栈的顶部。
Ldsfld Pushes the value of a static field onto the evaluation stack. 将静态字段的值推送到求值堆栈上。
Ldsflda Pushes the address of a static field onto the evaluation stack. 将静态字段的地址推送到计算堆栈上。
Ldstr Pushes a new object reference to a string literal stored in the metadata. 将新对象引用推送到存储在元数据中的字符串文字。
Ldtoken Converts a metadata token to its runtime representation, pushing it onto the evaluation stack. 将元数据令牌转换为其运行时表示形式,并将其推送到评估堆栈上。
Ldvirtftn Pushes 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)推送到计算堆栈上。
Leave Exits a protected region of code, unconditionally transferring control to a specific target instruction. 退出受保护的代码区域,无条件地将控制权转移到特定的目标指令。
Leave_S Exits a protected region of code, unconditionally transferring control to a target instruction (short form). 退出受保护的代码区域,无条件地将控制权转移到目标指令(缩写)。
Localloc Allocates 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. 从本地动态内存池中分配一定数量的字节,并将第一个分配字节的地址(临时指针,类型*)推送到评估堆栈上。
Mkrefany Pushes a typed reference to an instance of a specific type onto the evaluation stack. 将对特定类型实例的类型化引用推送到计算堆栈上。
Mul Multiplies two values and pushes the result on the evaluation stack. 将两个值相乘,并将结果推送到计算堆栈上。
Mul_Ovf Multiplies two integer values, performs an overflow check, and pushes the result onto the evaluation stack. 将两个整数值相乘,执行溢出检查,并将结果推送到计算堆栈上。
Mul_Ovf_Un Multiplies two unsigned integer values, performs an overflow check, and pushes the result onto the evaluation stack. 将两个无符号整数值相乘,执行溢出检查,并将结果推送到计算堆栈上。
Neg Negates a value and pushes the result onto the evaluation stack. 取一个值的负值并将结果推送到计算堆栈上。
Newarr Pushes an object reference to a new zero-based, one-dimensional array whose elements are of a specific type onto the evaluation stack. 将对元素为特定类型的新的基于零的一维数组的对象引用推送到计算堆栈上。
Newobj Creates a new object or a new instance of a value type, pushing an object reference (type O) onto the evaluation stack. 创建新对象或值类型的新实例,将对象引用(类型O)推送到计算堆栈上。
Nop Fills space if opcodes are patched. No meaningful operation is performed although a processing cycle can be consumed. 如果修补了操作码,则填充空间。尽管可以消耗处理周期,但不执行有意义的操作。
Not Computes the bitwise complement of the integer value on top of the stack and pushes the result onto the evaluation stack as the same type. 计算堆栈顶部整数值的逐位补码,并将结果作为同一类型推送到计算堆栈上。
Or Compute the bitwise complement of the two integer values on top of the stack and pushes the result onto the evaluation stack. 计算堆栈顶部两个整数值的逐位补码,并将结果推送到求值堆栈上。
Pop Removes the value currently on top of the evaluation stack. 删除当前位于评估堆栈顶部的值。
Prefix1 This is a reserved instruction. 这是一条保留指令。
Prefix2 This is a reserved instruction. 这是一条保留指令。
Prefix3 This is a reserved instruction. 这是一条保留指令。
Prefix4 This is a reserved instruction. 这是一条保留指令。
Prefix5 This is a reserved instruction. 这是一条保留指令。
Prefix6 This is a reserved instruction. 这是一条保留指令。
Prefix7 This is a reserved instruction. 这是一条保留指令。
Prefixref This is a reserved instruction. 这是一条保留指令。
Readonly Specifies that the subsequent array address operation performs no type check at run time, and that it returns a managed pointer whose mutability is restricted. 指定后续数组地址操作在运行时不执行类型检查,并指定它返回一个可变性受到限制的托管指针。
Refanytype Retrieves the type token embedded in a typed reference. 检索嵌入在类型化引用中的类型标记。
Refanyval Retrieves the address (type &) embedded in a typed reference. 检索嵌入类型化引用中的地址(类型&)。
Rem Divides two values and pushes the remainder onto the evaluation stack. 将两个值相除,并将余数推送到求值堆栈上。
Rem_Un Divides two unsigned values and pushes the remainder onto the evaluation stack. 将两个无符号值相除,并将余数推送到计算堆栈中。
Ret Returns from the current method, pushing a return value (if present) from the callee's evaluation stack onto the caller's evaluation stack. 从当前方法返回,将返回值(如果存在)从被调用者的评估堆栈推送到调用者的评估栈。
Rethrow Rethrows the current exception. 重新处理当前异常。
Shl Shifts an integer value to the left (in zeroes) by a specified number of bits, pushing the result onto the evaluation stack. 将整数值向左(以零为单位)移动指定的位数,将结果推送到计算堆栈上。
Shr Shifts an integer value (in sign) to the right by a specified number of bits, pushing the result onto the evaluation stack. 将整数值(带符号)向右移动指定的位数,将结果推送到计算堆栈上。
Shr_Un Shifts an unsigned integer value (in zeroes) to the right by a specified number of bits, pushing the result onto the evaluation stack. 将无符号整数值(以零为单位)向右移动指定位数,将结果推送到计算堆栈上。
Sizeof Pushes the size, in bytes, of a supplied value type onto the evaluation stack. 将提供的值类型的大小(以字节为单位)推送到评估堆栈中。
Starg Stores the value on top of the evaluation stack in the argument slot at a specified index. 将值存储在参数槽中指定索引处的求值堆栈顶部。
Starg_S Stores the value on top of the evaluation stack in the argument slot at a specified index, short form. 将值存储在参数槽中计算堆栈顶部的指定索引的缩写形式中。
Stelem Replaces the array element at a given index with the value on the evaluation stack, whose type is specified in the instruction. 将给定索引处的数组元素替换为计算堆栈上的值,该值的类型在指令中指定。
Stelem_I Replaces the array element at a given index with the native int value on the evaluation stack. 用计算堆栈上的本机int值替换给定索引处的数组元素。
Stelem_I1 Replaces the array element at a given index with the int8 value on the evaluation stack. 用计算堆栈上的int8值替换给定索引处的数组元素。
Stelem_I2 Replaces the array element at a given index with the int16 value on the evaluation stack. 用计算堆栈上的int16值替换给定索引处的数组元素。
Stelem_I4 Replaces the array element at a given index with the int32 value on the evaluation stack. 用计算堆栈上的int32值替换给定索引处的数组元素。
Stelem_I8 Replaces the array element at a given index with the int64 value on the evaluation stack. 用计算堆栈上的int64值替换给定索引处的数组元素。
Stelem_R4 Replaces the array element at a given index with the float32 value on the evaluation stack. 将求值堆栈上给定索引处的数组元素替换为float32值。
Stelem_R8 Replaces the array element at a given index with the float64 value on the evaluation stack. 将计算堆栈上给定索引处的数组元素替换为float64值。
Stelem_Ref Replaces the array element at a given index with the object ref value (type O) on the evaluation stack. 将给定索引处的数组元素替换为计算堆栈上的对象引用值(类型O)。
Stfld Replaces the value stored in the field of an object reference or pointer with a new value. 将存储在对象引用或指针字段中的值替换为新值。
Stind_I Stores a value of type native int at a supplied address. 将本机int类型的值存储在提供的地址。
Stind_I1 Stores a value of type int8 at a supplied address. 将类型为int8的值存储在提供的地址中。
Stind_I2 Stores a value of type int16 at a supplied address. 将类型为int16的值存储在提供的地址中。
Stind_I4 Stores a value of type int32 at a supplied address. 将类型为int32的值存储在提供的地址。
Stind_I8 Stores a value of type int64 at a supplied address. 将类型为int64的值存储在提供的地址。
Stind_R4 Stores a value of type float32 at a supplied address. 在提供的地址中存储float32类型的值。
Stind_R8 Stores a value of type float64 at a supplied address. 在提供的地址中存储float64类型的值。
Stind_Ref Stores a object reference value at a supplied address. 将对象引用值存储在提供的地址。
Stloc Pops the current value from the top of the evaluation stack and stores it in the local variable list at a specified index. 从评估堆栈的顶部弹出当前值,并将其存储在指定索引处的局部变量列表中。
Stloc_0 Pops the current value from the top of the evaluation stack and stores it in the local variable list at index 0. 从评估堆栈的顶部弹出当前值,并将其存储在索引0处的局部变量列表中。
Stloc_1 Pops the current value from the top of the evaluation stack and stores it in the local variable list at index 1. 从评估堆栈的顶部弹出当前值,并将其存储在索引1处的局部变量列表中。
Stloc_2 Pops the current value from the top of the evaluation stack and stores it in the local variable list at index 2. 从评估堆栈的顶部弹出当前值,并将其存储在索引2处的局部变量列表中。
Stloc_3 Pops the current value from the top of the evaluation stack and stores it in the local variable list at index 3. 从评估堆栈的顶部弹出当前值,并将其存储在索引3处的局部变量列表中。
Stloc_S Pops the current value from the top of the evaluation stack and stores it in the local variable list at index (short form). 从评估堆栈的顶部弹出当前值,并将其存储在索引处的局部变量列表中(缩写)。
Stobj Copies a value of a specified type from the evaluation stack into a supplied memory address. 将指定类型的值从求值堆栈复制到提供的内存地址中。
Stsfld Replaces the value of a static field with a value from the evaluation stack. 将静态字段的值替换为求值堆栈中的值。
Sub Subtracts one value from another and pushes the result onto the evaluation stack. 从另一个值中减去一个值,并将结果推送到计算堆栈中。
Sub_Ovf Subtracts one integer value from another, performs an overflow check, and pushes the result onto the evaluation stack. 从另一个整数值中减去一个,执行溢出检查,并将结果推送到计算堆栈上。
Sub_Ovf_Un Subtracts one unsigned integer value from another, performs an overflow check, and pushes the result onto the evaluation stack. 从另一个无符号整数值中减去一个,执行溢出检查,并将结果推送到计算堆栈中。
Switch Implements a jump table. 实现一个跳转表。
Tailcall Performs a postfixed method call instruction such that the current method's stack frame is removed before the actual call instruction is executed. 执行后置方法调用指令,以便在执行实际调用指令之前删除当前方法的堆栈帧。
Throw Throws the exception object currently on the evaluation stack. 抛出当前评估堆栈上的异常对象。
Unaligned Indicates 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指令的自然大小对齐。
Unbox Converts the boxed representation of a value type to its unboxed form. 将值类型的装箱表示形式转换为其未装箱形式。
Unbox_Any Converts the boxed representation of a type specified in the instruction to its unboxed form. 将指令中指定的类型的装箱表示形式转换为其未装箱形式。
Volatile Specifies 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. 指定当前位于评估堆栈顶部的地址可能不稳定,并且无法缓存读取该位置的结果,或者无法抑制对该位置的多个存储。
Xor Computes 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

posted @ 2023-07-21 08:51  NiueryDiary  阅读(285)  评论(0编辑  收藏  举报