工具 --- IL指令集解釋

来源:https://www.cnblogs.com/pandefu/archive/2023/07/21/17536273.html
-Advertisement-
Play Games

## 引言 彙總一下所有的 .NET IL 指令,以及它們的名稱、操作碼值、堆棧轉換行為和描述。 作為反編譯IL代碼時的查詢字典。 ## IL 指令集列表 以下內容來自[微軟官方文檔](https://learn.microsoft.com/en-us/dotnet/api/system.refle ...


引言

彙總一下所有的 .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

作者: Niuery Daily

出處: https://www.cnblogs.com/pandefu/>

郵箱: [email protected]

關於作者:.Net Framework,.Net Core ,WindowsForm,WPF ,控制項庫,多線程

本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出 原文鏈接,否則保留追究法律責任的權利。 如有問題, 可郵件咨詢。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • # Avalonia項目打包安裝包 要將 Avalonia 項目打包成安裝包,你可以使用 Avalonia 發佈工具來完成 # 1.創建一個發佈配置文件 在你的 Avalonia 項目中,創建一個發佈配置文件。在項目文件夾中創建一個名為 `publish.xml` 的文件,並添加以下內容: ```x ...
  • # 在.NET Core中使用RabbitMQ # 前言 逛園子的時候看到一篇.NET 學習RabbitMq的文章(視頻地址和文章地址放在文章底部了),寫的不錯,我也來實現一下。 我是把RabbitMQ放在伺服器的,然後先說一下如何部署它。 註意:在使用到RabbitMQ的項目中需要安裝Nuget包 ...
  • 直接上代碼 服務端: using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using System.Threading.Tasks; using Sy ...
  • # .Net 一套介面多實現 介面(`interface`)可理解為規範、標準、協議。介面是用來約束各方都在同一組規範下工作。 電腦外設USB介面,各個品牌商家生產的U盤、滑鼠都能夠被電腦主板識別並工作,這是因為個生產商都遵循實現了USB介面協議。 在編程中`介面`應用非常廣泛,例如`IDbConn ...
  • 基礎操作 CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); cancellationTokenSource.Token.Register(() => { Console.WriteLine ...
  • ## 一:背景 ### 1. 講故事 在 dump 分析旅程中,經常會遇到很多朋友反饋一類問題,比如: * 方法平時都執行的特別快,但有時候會特別慢,怎麼排查? * 我的方法第一次執行特別慢,能看到慢在哪裡嗎? 相信有朋友肯定說,加些日誌不就好了,大方向肯定是沒問題的,但加日誌的顆粒度會比較粗而且侵 ...
  • **前言** 小編在油管學習.NET知識,刷到一個外國小哥在用一個類似Idea的IDE開發.NET。出於好奇,小編在某谷搜索Idea支持.NET嗎?結果當然不支持,Idea主要是開發Java的IDE。幸好搜索引擎有個圖片搜索功能,於是拿圖片搜索了這個IDE,原來它的名字叫Rider,是Idea同一家 ...
  • # Unity UGUI的VerticalLayoutGroup(垂直佈局)組件的介紹及使用 ## 1. 什麼是VerticalLayoutGroup組件? VerticalLayoutGroup是Unity UGUI中的一種佈局組件,用於在垂直方向上自動排列子對象。它可以根據子對象的大小和佈局設置 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...