C # reverse engineering-il Instruction Set

Source: Internet
Author: User

Some il language explanations:

Jump command set

Public field static beq if the two values are equal, the control is transferred to the target command.
Public field static beq_s if the two values are equal, the control is transferred to the target command (short format ).
Public field static Bge if the first value is greater than or equal to the second value, the control is transferred to the target command.
Public field static bge_s if the first value is greater than or equal to the second value, the control is transferred to the target command (short format ).
Public field static bge_un when comparing unsigned integer values or unordered floating point values, if the first value is greater than the second value, the control is transferred to the target command.
Public field static bge_un_s when comparing unsigned integer values or unordered floating point values, if the first value is greater than the second value, the control is transferred to the target command (short format ).
Public field static Bgt if the first value is greater than the second value, the control is transferred to the target command.
Public field static bgt_s if the first value is greater than the second value, the control is transferred to the target command (short format ).
Public field static bgt_un when comparing unsigned integer values or unordered floating point values, if the first value is greater than the second value, the control is transferred to the target command.
Public field static bgt_un_s when comparing unsigned integer values or unordered floating point values, if the first value is greater than the second value, the control is transferred to the target command (short format ).
Public field static ble if the first value is less than or equal to the second value, the control is transferred to the target command.
Public field static ble_s if the first value is less than or equal to the second value, the control is transferred to the target command (short format ).
Public field static ble_un when comparing unsigned integer values or unordered floating point values, if the first value is less than or equal to the second value, the control is transferred to the target command.
Public field static ble_un_s when comparing unsigned integer values or unordered floating point values, if the first value is less than or equal to the second value, the control is transferred to the target command (short format ).
Public field static BLT if the first value is smaller than the second value, the control is transferred to the target command.
Public field static blt_s if the first value is smaller than the second value, the control is transferred to the target command (short format ).
Public field static blt_un when comparing unsigned integer values or unordered floating point values, if the first value is smaller than the second value, the control is transferred to the target command.
Public field static blt_un_s when comparing unsigned integer values or unordered floating point values, if the first value is smaller than the second value, the control is transferred to the target command (short format ).
Public field static bne_un transfers control to the target command when two unsigned integer values or unordered floating point values are not equal.
Public field static bne_un_s when two unsigned integer values or unordered floating point values are not equal, the control is transferred to the target command (short format ).
Public field static BR unconditionally transfers the control to the target command.
Public field static br_s unconditionally transfers the control to the target command (short format ).
Public field static brfalse if the value is false, null reference (nothing in Visual Basic), or zero, the control is transferred to the target command.
Public field static brfalse_s if the value is false, null reference, or zero, the control is transferred to the target command.
Public field static brtrue if the value is true, non-null, or non-zero, the control is transferred to the target command.
Public field static brtrue_s if the value is true, non-null, or non-zero, the control is transferred to the target command (short format ).
Comparison command set
Public field static CEQ compares two values. If the two values are equal, the integer 1 (int32) is pushed to the computing stack; otherwise, 0 (int32) is pushed to the computing stack.
Public field static CGT compares two values. If the first value is greater than the second value, the integer 1 (int32) is pushed to the computing stack. Otherwise, 0 (int32) is pushed to the computing stack.
Public field static cgt_un compares two unsigned or unordered values. If the first value is greater than the second value, the integer 1 (int32) is pushed to the computing stack. Otherwise, 0 (int32) is pushed to the computing stack.
Public field static CLT compares two values. If the first value is smaller than the second value, the integer 1 (int32) is pushed to the computing stack. Otherwise, 0 (int32) is pushed to the computing stack.
Public field static clt_un compares unsigned or unordered values value1 and value2. If value1 is less than value2, the integer 1 (int32) is pushed to the computing stack. Otherwise, 0 (int32) is pushed to the computing stack.

Public field static JMP exits the current method and jumps to the specified method.

 

Description
Public field static add adds two values and pushes the results to the computing stack.
Public field static add_ovf adds two integers, performs an overflow check, and pushes the result to the computing stack.
Public field static add_ovf_un adds two unsigned integer values, performs an overflow check, and pushes the results to the computing stack.
Public field static and calculates the bitwise "and" of the two values and pushes the result to the computing stack.
Public field static Arglist returns an unmanaged pointer to the parameter list of the current method.

Public field static box converts a value class to an object reference (O type ).
Public field static break sends a signal to the common language structure (CLI) to notify the debugger that a breakpoint has been hit.
Public field static call calls the method indicated by the passed method specifier.
Public field static calli calls the method indicated on the computing stack by calling the parameters described in the Convention (as a pointer to the entry point ).
Public field static callvirt calls the post-binding method for the object and pushes the return value to the computing stack.
Public field static castclass tries to convert the object passed by the reference to the specified class.
Public field static ckfinite if the value is not a finite number, arithmeticexception is thrown.

Public field static constrained constraint specifies the type of virtual method call to be performed on it.
Public field static conv_ I converts the value at the top of the computing stack to natural Int.
Public field static conv_i1 converts the value at the top of the computing stack to int8, and then expands (Fills) It To int32.
Public field static conv_i2 converts the value at the top of the computing stack to int16, and expands (Fills) It To int32.
Public field static conv_i4 converts the value at the top of the computing stack to int32.
Public field static conv_i8 converts the value at the top of the computing stack to int64.
Public field static conv_ovf_ I converts the signed value at the top of the computing stack to a signed natural int, and causes overflowexception when overflow occurs.
Public field static conv_ovf_ I _un converts the unsigned value at the top of the computing stack to a signed natural int, and causes overflowexception when overflow occurs.
Public field static conv_ovf_i1 converts the signed value at the top of the computing stack to a signed int8 value, extends it to int32, and causes overflowexception when overflow occurs.
Public field static conv_ovf_i0000un converts the unsigned value at the top of the computing stack to a signed int8 value and expands it to int32, causing overflowexception when overflow occurs.
Public field static conv_ovf_i2 converts the signed value at the top of the computing stack to a signed int16 value, extends it to int32, and causes overflowexception when overflow occurs.
Public field static conv_ovf_i2_un converts the unsigned value at the top of the computing stack to a signed int16 value and expands it to int32, causing overflowexception when overflow occurs.
Public field static conv_ovf_i4 converts the signed value at the top of the computing stack to a signed int32 value, and causes overflowexception when overflow occurs.
Public field static conv_ovf_i4_un converts the unsigned value at the top of the computing stack to a signed int32, and causes overflowexception when overflow occurs.
Public field static conv_ovf_i8 converts the signed value at the top of the computing stack to a signed int64 value, and causes overflowexception when overflow occurs.
Public field static conv_ovf_i8_un converts the unsigned value at the top of the computing stack to a signed int64 value, and causes overflowexception when overflow occurs.
Public field static conv_ovf_u converts the signed value at the top of the computing stack to unsigned natural int, and causes overflowexception when overflow occurs.
Public field static conv_ovf_u_un converts the unsigned value at the top of the computing stack to unsigned natural int, and causes overflowexception when overflow occurs.
Public field static conv_ovf_u1 converts the signed value at the top of the computing stack to unsigned int8 and expands it to int32, causing overflowexception when overflow occurs.
Public field static conv_ovf_u0000un converts the unsigned value at the top of the computing stack to unsigned int8 and expands it to int32, causing overflowexception when overflow occurs.
Public field static conv_ovf_u2 converts the signed value at the top of the computing stack to unsigned int16 and expands it to int32, causing overflowexception when overflow occurs.
Public field static conv_ovf_u2_un converts the unsigned value at the top of the computing stack to unsigned int16 and expands it to int32, causing overflowexception when overflow occurs.
Public field static conv_ovf_u4 converts the signed value at the top of the computing stack to unsigned int32, and causes overflowexception when overflow occurs.
Public field static conv_ovf_u4_un converts the unsigned value at the top of the computing stack to unsigned int32, and causes overflowexception when overflow occurs.
Public field static conv_ovf_u8 converts the signed value at the top of the computing stack to unsigned int64, and causes overflowexception when overflow occurs.
Public field static conv_ovf_u8_un converts the unsigned value at the top of the computing stack to unsigned int64, and causes overflowexception when overflow occurs.
Public field static conv_r_un converts the unsigned integer at the top of the computing stack to float32.
Public field static conv_r4 converts the value at the top of the computing stack to float32.
Public field static conv_r8 converts the value at the top of the computing stack to float64.
Public field static conv_u converts the value at the top of the computing stack to unsigned natural int, and expands it to natural Int.
Public field static conv_u1 converts the value at the top of the computing stack to unsigned int8, and then expands it to int32.
Public field static conv_u2 converts the value located at the top of the computing stack to unsigned int16 and expands it to int32.
Public field static conv_u4 converts the value at the top of the computing stack to unsigned int32, and then expands it to int32.
Public field static conv_u8 converts the value at the top of the computing stack to unsigned int64, and expands it to int64.
Public field static cpblk copies a specified number of bytes from the source address to the target address.
Public field static cpobj copies the value type at the address of the object (&, *, or natural int type) to the address of the target object (&, *, or natural int type.
Public field static Div splits two values and pushes the results to the computing stack as floating point (F type) or commercial (int32 type.
Public field static div_un division of two unsigned integer values and push the result (int32) to the computing stack.
Public field static DUP copies the current top value of the computing stack, and then pushes the copy to the computing stack.
Public field static endfilter transfers control from abnormal filter clause back to common language structure (CLI) for Exception Handling Program .
Public field static endfinally transfers control from the fault or finally clause of the exception block back to the common language structure (CLI) exception handler.
Public field static initblk initializes a specified block of memory located in a specific address to a given size and initial value.
Public field static initobj initializes all fields of the object at the specified address as null references or 0 of the appropriate primitive type.
Public field static isinst test whether the object reference (O type) is an instance of a specific class.
Public field static ldarg loads the parameter (referenced by the specified index value) to the stack.
Public field static ldarg_0 loads the index 0 parameter to the computing stack.
Public field static ldarg_1 loads the parameter with index 1 to the computing stack.
Public field static ldarg_2 loads the parameter with index 2 to the computing stack.
Public field static ldarg_3 loads the parameter with index 3 to the computing stack.
Public field static ldarg_s loads the parameter (referenced by the specified short format index) to the computing stack.
Public field static ldarga loads the parameter address to the computing stack.
Public field static ldarga_s loads the parameter address to the computing stack in short format.
Public field static ldc_i4 pushes the int32 type value to the computing stack as int32.
Public field static ldc_i4_0 pushes the integer 0 to the computing stack as int32.
Public field static ldc_i4_1 pushes the integer 1 to the computing stack as int32.
Public field static ldc_i4_2 pushes the integer 2 to the computing stack as int32.
Public field static ldc_i4_3 pushes the integer 3 to the computing stack as int32.
Public field static ldc_i4_4 pushes the integer 4 to the computing stack as int32.
Public field static ldc_i4_5 pushes the integer 5 to the computing stack as int32.
Public field static ldc_i4_6 pushes the integer 6 to the computing stack as int32.
Public field static ldc_i4_7 pushes the integer 7 to the computing stack as int32.
Public field static ldc_i4_8 pushes the integer 8 to the computing stack as int32.
Public field static ldc_i4_m1 pushes the integer-1 to the computing stack as int32.
Public field static ldc_i4_s pushes the provided int8 value to the computing stack as int32 (short format ).
Public field static ldc_i8 pushes the provided int64 type value to the computing stack as int64.
Public field static ldc_r4 pushes the provided float32 type value to the computing stack as the F (float) type.
Public field static ldc_r8 pushes the provided float64 type value to the computing stack as the F (float) type.
Public field static ldelem loads the elements in the specified array index to the top of the computing stack according to the type specified in the instruction.
Public field static ldelem_ I loads the natural int type element at the specified array index to the top of the computing stack as a natural Int.
Public field static ldelem_i1 loads int8 elements at the specified array index as int32 to the top of the computing stack.
Public field static ldelem_i2 loads int16 elements at the specified array index as int32 to the top of the computing stack.
Public field static ldelem_i4 loads int32 elements at the specified array index as int32 to the top of the computing stack.
Public field static ldelem_i8 loads int64 elements at the specified array index as int64 to the top of the computing stack.
Public field static ldelem_r4 loads float32 elements located at the specified array index as F (float type) to the top of the computing stack.
Public field static ldelem_r8 loads float64 elements at the specified array index as F (float type) to the top of the computing stack.
Public field static ldelem_ref loads the elements that contain object references at the specified array index as the O type (Object Reference) to the top of the computing stack.
Public field static ldelem_u1 loads the unsigned int8 type element at the specified array index as int32 to the top of the computing stack.
Public field static ldelem_u2 loads the unsigned int16 type element at the specified array index as int32 to the top of the computing stack.
Public field static ldelem_u4 loads the unsigned int32 element at the specified array index as int32 to the top of the computing stack.
Public field static ldelema loads the address of the array element located in the specified array index as the & type (managed pointer) to the top of the computing stack.
Public field static ldfld find the value of the field in the calculation stack that the object references.
Public field static ldflda searches for the address of the field in the computing stack that the object references.
Public field static ldftn will point to the local machine that implements the specific method Code (Natural int type) is pushed to the computing stack.
Public field static ldind_ I indirectly loads the value of the natural int type to the computing stack as a natural Int.
Public field static ldind_i1 indirectly loads int8 values to the computing stack as int32.
Public field static ldind_i2 indirectly loads int16 values to the computing stack as int32.
Public field static ldind_i4 indirectly loads int32-type values to the computing stack as int32.
Public field static ldind_i8 indirectly loads int64-type values to the computing stack as int64.
Public field static ldind_r4 indirectly loads the float32 type value to the computing stack as the F (float) type.
Public field static ldind_r8 indirectly loads the float64 type value to the computing stack as the F (float) type.
Public field static ldind_ref indirectly loads the object reference to the computing stack as the O (Object Reference) type.
Public field static ldind_u1 indirectly loads unsigned int8 values to the computing stack as int32.
Public field static ldind_u2 indirectly loads the unsigned int16 type value to the computing stack as int32.
Public field static ldind_u4 indirectly loads the unsigned int32 type value to the computing stack as int32.
Public field static ldlen pushes the number of elements in one-dimensional arrays starting from scratch to the computing stack.
Public field static ldloc loads local variables at the specified index to the computing stack.
Public field static ldloc_0 loads local variables at index 0 to the computing stack.
Public field static ldloc_1 loads local variables at Index 1 to the computing stack.
Public field static ldloc_2 loads local variables at index 2 to the computing stack.
Public field static ldloc_3 loads local variables at index 3 to the computing stack.
Public field static ldloc_s loads local variables at a specific index to the computing stack (short format ).
Public field static ldloca loads the address of the local variable located at a specific index to the computing stack.
Public field static ldloca_s loads the address of the local variable located at a specific index to the computing stack (short format ).
Public field static ldnull pushes an empty reference (O type) to the computing stack.
Public field static ldobj copies the value type object pointed to by the address to the top of the computing stack.
Public field static ldsfld pushes the value of the static field to the computing stack.
Public field static ldsflda pushes the address of the static field to the computing stack.
Public field static ldstr pushes new object references to strings stored in metadata.
Public field static ldtoken converts the metadata tag to its runtime representation and pushes it to the computing stack.
Public field static ldw.ftn pushes the unmanaged pointer (natural int type) pointing to the local code that implements the specific virtual method associated with the specified object to the computing stack.
The public field static leave exits the protected code region and unconditionally transfers the control to a specific target command.
Public field static leave_s exits the protected code region and unconditionally transfers the control to the target command (abbreviated form ).
Public field static localloc allocates a specific number of bytes from the local dynamic memory pool and pushes the address of the first allocated byte (transient pointer, * type) to the computing stack.
Public field static mkrefany pushes typed references to specific types of instances to the computing stack.
Public field static Mul multiply two values and push the result to the computing stack.
Public field static mul_ovf multiply two integers, perform an overflow check, and push the results to the computing stack.
Public field static mul_ovf_un multiply two unsigned integer values, perform an overflow check, and push the results to the computing stack.
Public field static neg performs reverse lookup on a value and pushes the result to the computing stack.
Public field static newarr pushes a reference to a new zero-starting one-dimensional array (whose elements belong to a specific type) to the computing stack.
Public field static newobj creates a new object or instance of the value type, and pushes the object reference (O type) to the computing stack.
Public field static NOP fill in space if the operation code is patched. Although the processing cycle may be consumed, no meaningful operations are performed.
Public field static not calculates the bitwise completion of the integer at the top of the stack and pushes the result as the same type to the stack.
Public field static or calculates the bitwise complement of the two integers at the top of the stack and pushes the result to the stack.
Public field static pop removes the value currently at the top of the computing stack.
Public field static prefix1 this command is reserved.
Public field static prefix2 this command is reserved.
Public field static prefix3 this command is reserved.
Public field static prefix4 this command is reserved.
Public field static prefix5 this command is reserved.
Public field static prefix6 this command is reserved.
Public field static prefix7 this command is reserved.
Public field static prefixref this command is reserved.
Public field static readonly specifies that the subsequent array address operations do not perform type checks during runtime, and return managed pointers with limited variability.
Public field static refanytype searches for type tags embedded in a typed reference.
Public field static refanyval retrieves the addresses (& types) embedded in the typed references ).
Public field static REM separates two values and pushes the remainder to the computing stack.
Public field static rem_un splits two unsigned values and pushes the remainder to the computing stack.
Public field static RET is returned from the current method, and the return value (if any) is pushed from the computing stack of the caller to the computing stack of the caller.
Public field static rethrow raises the current exception again.
Public field static SHL shifts the integer left (filled with zero) to the specified number of digits and pushes the result to the computing stack.
Public field static SHR shifts the integer to the right (retain the symbol) of the specified number of digits and pushes the result to the computing stack.
Public field static shr_un shifts the unsigned integer value right (with zero fill) to the specified number of digits and pushes the result to the computing stack.
Public field static sizeof pushes the size (in bytes) of the provided value type to the computing stack.
Public field static starg stores the value at the top of the computing stack to the parameter slot of the specified index.
Public field static starg_s stores the value at the top of the computing stack in the specified index (short format) in the parameter slot ).
Public field static stelem replaces the array element at the given index with the value in the calculation stack, and its type is specified in the instruction.
Public field static stelem_ I replaces the array element at the given index with the natural int value on the computing stack.
Public field static stelem_i1 replaces the array element at the given index with the int8 value on the computing stack.
Public field static stelem_i2 replaces the array element at the given index with the int16 value on the computing stack.
Public field static stelem_i4 replaces the array element at the given index with the int32 value on the computing stack.
Public field static stelem_i8 replaces the array element at the given index with the int64 value on the computing stack.
Public field static stelem_r4 replaces the array element at the given index with the float32 value on the computing stack.
Public field static stelem_r8 replaces the array element at the given index with the float64 value on the computing stack.
Public field static stelem_ref replaces the array element at the given index with the ref value (O type) of the object on the computing stack.
Public field static stfld replaces the value stored in the field of the object reference or pointer with the new value.
Public field static stind_ I stores the natural int type value in the provided address.
Public field static stind_i1 stores the int8 type value in the provided address.
Public field static stind_i2 stores int16 type values in the provided address.
Public field static stind_i4 stores int32 values at the provided address.
Public field static stind_i8 stores the int64 type value in the provided address.
Public field static stind_r4 stores the float32 type value in the provided address.
Public field static stind_r8 stores float64 values at the provided address.
Public field static stind_ref stores the object reference value at the provided address.
Public field static stloc pops up the current value from the top of the computing stack and stores it in the local variable list at the specified index.
Public field static stloc_0 pops up the current value from the top of the computing stack and stores it in the local variable list at index 0.
Public field static stloc_1 pops up the current value from the top of the computing stack and stores it in the local variable list at Index 1.
Public field static stloc_2 pops up the current value from the top of the computing stack and stores it in the local variable list at index 2.
Public field static stloc_3 pops up the current value from the top of the computing stack and stores it in the local variable list at index 3.
Public field static stloc_s pops up the current value from the top of the computing stack and stores it at the index (short format) in the local variable list ).
Public field static stobj copies the specified type of value from the computing stack to the provided memory address.
Public field static stsfld replaces the value of the static field with the value from the calculation stack.
Public field static sub deducts a value from other values and pushes the result to the computing stack.
Public field static sub_ovf deducts an integer from another value, performs an overflow check, and pushes the result to the computing stack.
Public field static sub_ovf_un removes an unsigned integer from another value, performs an overflow check, and pushes the result to the computing stack.
Public field static switch implements jump table.
Public field static tailcall executes the method call instruction with the suffix to remove the stack frame of the current method before executing the actual call instruction.
Public field static throw triggers the exception object currently on the computing stack.
Public field static unaligned indicates that the current address on the computing Stack may not be aligned with the natural size of the following ldind, STIND, ld1_, st1_, ldobj, stobj, initblk, or cpblk commands.
Public field static Unbox converts the boxed representation of the value type to its unboxed representation.
Public field static unbox_any converts the boxed representation of the specified type in the command to the unboxed representation.
Public field static volatile specifies that the current address at the top of the computing stack can be easy to lose, and the results of reading this location cannot be cached, or multiple storage zones of this address cannot be canceled.

Public field static XOR calculates the bitwise XOR of the two values at the top of the computing stack, and pushes the result to the computing stack.

 

Address: http://www.cnblogs.com/davyjiang/articles/1337400.html

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.