IL語法

IL語法

.Flags部分可設置
1.可訪問性數組

  • privatescope: 該方法不能被引用。
  • private: 該方法只能被自身及其嵌套類型調用。
  • famandassem: 該方法只能被當前程序集內部的繼承類型調用。(internal and protected)
  • assembly: 該方法只能被程序集內部成員調用。
  • family: 該方法只能被繼承類型調用。
  • famorassem: 該方法能夠被程序集內部成員或外部繼承類型調用。(internal or protected)
  • public: 公共方法。

2. Contract安全

  • static: 靜態方法。
  • final: 不能被 override 的方法。
  • virtual: 虛方法,不能和 static 同時使用。
  • hidebysig: 該方法對繼承類型隱藏。該標記僅提供給編譯器使用,但會被 CLR 忽略。

3. Vitual method table (v-table) control flags多線程

  • newslot: 必須和 virtual 一塊兒使用,添加該關鍵字的虛方法不會 override 基類中同名(含簽名)虛方法,而是在 v-table 中建立一個新槽(new slot)。

4. Implementationless

  • abstract: 抽象方法,不提供實現代碼。其 RVA = 0,任何擁有抽象方法的類型必須添加 abstract 成爲抽象類型。
  • specialname: 該方法名有特殊含義,如 .cctor、.ctor 等。
  • pinvokeimpl: 該方法是非託管方法,經過 P/Invoke 封裝調用。

5. Reservedide

  • rtspecialname: 該方法擁有 CLR 內部使用的特殊名稱,必須和 specialname 一塊兒使用。

. Implementation Flags

1. Code typeui

  • cil: 該方法由 CIL (common intermediate language) 實現。(默認)
  • native: 該方法由 native code 實現。
  • runtime: 該方法由 CLR 自動生成。只有 mscorlib.dll 中的某些方法帶有此標記。

2. Code managementthis

  • managed: 託管代碼。(默認)
  • unmanaged: 非託管代碼,必須和 native 一塊兒使用。

3. Implementation and interoperabilityspa

  • internalcall: 內部使用標記。
  • synchronized: 指示 JIT 自動爲其插入同步代碼,以保證多線程調用安全。在 C# 中咱們爲方法添加 [MethodImpl(MethodImplOptions.Synchronized)] 特性時,編譯器就會爲該方法添加該標記。對於實例方法而言,自動插入代碼會鎖定實例對象引用;而靜態方法,會鎖定其所在類型的靜態類型對象(System.Type)。
  • noinlining: 禁止內聯(inline)調用。

 

部分CIL 操做碼線程

操做碼                                           做用debug

add, sub, mul, div, rem                   用於兩個數加減乘除求模

add, or, not, xor                            用於在兩個值上進行二進制操做

ceq, cgt, clt                                   用不一樣的方法比較兩個在棧上的值,ceq:是否相等;cgt:是否大約;clt:是否小於

box, unbox                                   在引用類型和值類型之間轉換

ret                                                退出方法和返回一個值

beq, bgt, ble, blt, switch                 控制方法中的條件分支,beg:若是相等就停止到代碼標籤;bgt:若是大於就停止到代碼標籤;

                                                   ble:若是小於等於就停止到代碼標籤;blt:若是小於就停止到代碼標籤;

                                                   全部的分支控制操做碼都須要給出一個CIL代碼標籤做爲條件爲真的跳轉目的

br.s                                             (無條件)停止到代碼標籤

call                                               調用一個成員

nearer, newobj                              在內存中建立一個新的數組或新的對象類型

 

主要的入棧CIL操做碼  (ld 加載)

操做碼                                           做用

ldarg (及多個變化形式)                     加載方法的參數到棧中。除了泛型ldarg(須要一個索引做爲參數),還有後其餘不少的變化形式。

                                                   eg. 有個數字後綴的ldarg操做碼來指定須要加載的參數。同時還有不少ldarg的變化形式容許加載

                                                   指定的數據類型(ldarg_i4, 加載int32)和值(ldarg_i4_5 加載一個值爲5的int32)

ldc (及多個變化形式)                      加載一個常數到棧中

ldfld (及多個變化形式)                      加載一個對象實例的成員到棧中

ldloc (及多個變化形式)                      加載一個本地變量到棧中

ldobj                                            得到一個堆對象的全部數據,並將它們放置到棧中

ldstr                                             加載一個字符串數據到棧中

 

主要的彈出棧操做碼 (st 存儲)

操做碼                                           做用

pop                                              刪除當前棧頂的值,可是並不影響存儲的值

starg                                            存儲棧頂的值到給出方法的參數,根據索引肯定這個參數

stloc (及多個變化形式)                      彈出當前棧頂的值並存儲在一個本地變量列表中,根據因此肯定這個參數

stobj                                            從棧中複製一個特定的類型到指定的內存地址

stfld                                             用從棧中得到的值替換對象成員的值

 

 

Opcode

Instruction

Description

Type of instruction

0x00

nop

Do nothing (Noperation).

Base instruction

0x01

break

Inform a debugger that a breakpoint has been reached.

Base instruction

0x02

ldarg.0

Load argument 0 onto the stack.

Base instruction

0x03

ldarg.1

Load argument 1 onto the stack.

Base instruction

0x04

ldarg.2

Load argument 2 onto the stack.

Base instruction

0x05

ldarg.3

Load argument 3 onto the stack.

Base instruction

0x06

ldloc.0

Load local variable 0 onto stack.

Base instruction

0x07

ldloc.1

Load local variable 1 onto stack.

Base instruction

0x08

ldloc.2

Load local variable 2 onto stack.

Base instruction

0x09

ldloc.3

Load local variable 3 onto stack.

Base instruction

0x0A

stloc.0

Pop a value from stack into local variable 0.

Base instruction

0x0B

stloc.1

Pop a value from stack into local variable 1.

Base instruction

0x0C

stloc.2

Pop a value from stack into local variable 2.

Base instruction

0x0D

stloc.3

Pop a value from stack into local variable 3.

Base instruction

0x0E

ldarg.s <uint8 (num)>

Load argument numbered num onto the stack, short form.

Base instruction

0x0F

ldarga.s <uint8 (argNum)>

Fetch the address of argument argNum, short form.

Base instruction

0x10

starg.s <uint8 (num)>

Store value to the argument numbered num, short form.

Base instruction

0x11

ldloc.s <uint8 (indx)>

Load local variable of index indx onto stack, short form.

Base instruction

0x12

ldloca.s <uint8 (indx)>

Load address of local variable with index indx, short form.

Base instruction

0x13

stloc.s <uint8 (indx)>

Pop a value from stack into local variable indx, short form.

Base instruction

0x14

ldnull

Push a null reference on the stack.

Base instruction

0x15

ldc.i4.m1

Push -1 onto the stack as int32.

Base instruction

0x15

ldc.i4.M1

Push -1 of type int32 onto the stack as int32 (alias for ldc.i4.m1).

Base instruction

0x16

ldc.i4.0

Push 0 onto the stack as int32.

Base instruction

0x17

ldc.i4.1

Push 1 onto the stack as int32.

Base instruction

0x18

ldc.i4.2

Push 2 onto the stack as int32.

Base instruction

0x19

ldc.i4.3

Push 3 onto the stack as int32.

Base instruction

0x1A

ldc.i4.4

Push 4 onto the stack as int32.

Base instruction

0x1B

ldc.i4.5

Push 5 onto the stack as int32.

Base instruction

0x1C

ldc.i4.6

Push 6 onto the stack as int32.

Base instruction

0x1D

ldc.i4.7

Push 7 onto the stack as int32.

Base instruction

0x1E

ldc.i4.8

Push 8 onto the stack as int32.

Base instruction

0x1F

ldc.i4.s <int8 (num)>

Push num onto the stack as int32, short form.

Base instruction

0x20

ldc.i4 <int32 (num)>

Push num of type int32 onto the stack as int32.

Base instruction

0x21

ldc.i8 <int64 (num)>

Push num of type int64 onto the stack as int64.

Base instruction

0x22

ldc.r4 <float32 (num)>

Push num of type float32 onto the stack as F.

Base instruction

0x23

ldc.r8 <float64 (num)>

Push num of type float64 onto the stack as F.

Base instruction

0x25

dup

Duplicate the value on the top of the stack.

Base instruction

0x26

pop

Pop value from the stack.

Base instruction

0x27

jmp <method>

Exit current method and jump to the specified method.

Base instruction

0x28

call <method>

Call method described by method.

Base instruction

0x29

calli <callsitedescr>

Call method indicated on the stack with arguments described by callsitedescr.

Base instruction

0x2A

ret

Return from method, possibly with a value.

Base instruction

0x2B

br.s <int8 (target)>

Branch to target, short form.

Base instruction

0x2C

brfalse.s <int8 (target)>

Branch to target if value is zero (false), short form.

Base instruction

0x2C

brnull.s <int8 (target)>

Branch to target if value is null (alias for brfalse.s), short form.

Base instruction

0x2C

brzero.s <int8 (target)>

Branch to target if value is zero (alias for brfalse.s), short form.

Base instruction

0x2D

brinst.s <int8 (target)>

Branch to target if value is a non-null object reference, short form (alias for brtrue.s).

Base instruction

0x2D

brtrue.s <int8 (target)>

Branch to target if value is non-zero (true), short form.

Base instruction

0x2E

beq.s <int8 (target)>

Branch to target if equal, short form.

Base instruction

0x2F

bge.s <int8 (target)>

Branch to target if greater than orequal to, short form.

Base instruction

0x30

bgt.s <int8 (target)>

Branch to target if greater than, short form.

Base instruction

0x31

ble.s <int8 (target)>

Branch to target if less than or equal to, short form.

Base instruction

0x32

blt.s <int8 (target)>

Branch to target if less than, short form.

Base instruction

0x33

bne.un.s <int8 (target)>

Branch to target if unequal or unordered, short form.

Base instruction

0x34

bge.un.s <int8 (target)>

Branch to target if greater than or equal to (unsigned or unordered), short form

Base instruction

0x35

bgt.un.s <int8 (target)>

Branch to target if greater than (unsigned or unordered), short form.

Base instruction

0x36

ble.un.s <int8 (target)>

Branch to target if less than or equal to (unsigned or unordered), short form

Base instruction

0x37

blt.un.s <int8 (target)>

Branch to target if less than (unsigned or unordered), short form.

Base instruction

0x38

br <int32 (target)>

Branch to target.

Base instruction

0x39

brfalse <int32 (target)>

Branch to target if value is zero (false).

Base instruction

0x39

brnull <int32 (target)>

Branch to target if value is null (alias for brfalse).

Base instruction

0x39

brzero <int32 (target)>

Branch to target if value is zero (alias for brfalse).

Base instruction

0x3A

brinst <int32 (target)>

Branch to target if value is a non-null object reference (alias for brtrue).

Base instruction

0x3A

brtrue <int32 (target)>

Branch to target if value is non-zero (true).

Base instruction

0x3B

beq <int32 (target)>

Branch to target if equal.

Base instruction

0x3C

bge <int32 (target)>

Branch to target if greater than orequal to.

Base instruction

0x3D

bgt <int32 (target)>

Branch to target if greater than.

Base instruction

0x3E

ble <int32 (target)>

Branch to target if less than or equal to.

Base instruction

0x3F

blt <int32 (target)>

Branch to target if less than.

Base instruction

0x40

bne.un <int32 (target)>

Branch to target if unequal or unordered.

Base instruction

0x41

bge.un <int32 (target)>

Branch to target if greater than or equal to (unsigned or unordered).

Base instruction

0x42

bgt.un <int32 (target)>

Branch to target if greater than (unsigned or unordered).

Base instruction

0x43

ble.un <int32 (target)>

Branch to target if less than or equal to (unsigned or unordered).

Base instruction

0x44

blt.un <int32 (target)>

Branch to target if less than (unsigned or unordered).

Base instruction

0x45

switch <uint32, int32, int32 (t1..tN)>

Jump to one of n values.

Base instruction

0x46

ldind.i1

Indirect load value of type int8 as int32 on the stack.

Base instruction

0x47

ldind.u1

Indirect load value of type unsigned int8 as int32 on the stack

Base instruction

0x48

ldind.i2

Indirect load value of type int16 as int32 on the stack.

Base instruction

0x49

ldind.u2

Indirect load value of type unsigned int16 as int32 on the stack

Base instruction

0x4A

ldind.i4

Indirect load value of type int32 as int32 on the stack.

Base instruction

0x4B

ldind.u4

Indirect load value of type unsigned int32 as int32 on the stack

Base instruction

0x4C

ldind.i8

Indirect load value of type int64 as int64 on the stack.

Base instruction

0x4C

ldind.u8

Indirect load value of type unsigned int64 as int64 on the stack (alias for ldind.i8).

Base instruction

0x4D

ldind.i

Indirect load value of type native int as native int on the stack

Base instruction

0x4E

ldind.r4

Indirect load value of type float32 as F on the stack.

Base instruction

0x4F

ldind.r8

Indirect load value of type float64 as F on the stack.

Base instruction

0x50

ldind.ref

Indirect load value of type object ref as O on the stack.

Base instruction

0x51

stind.ref

Store value of type object ref (type O) into memory at address

Base instruction

0x52

stind.i1

Store value of type int8 into memory at address

Base instruction

0x53

stind.i2

Store value of type int16 into memory at address

Base instruction

0x54

stind.i4

Store value of type int32 into memory at address

Base instruction

0x55

stind.i8

Store value of type int64 into memory at address

Base instruction

0x56

stind.r4

Store value of type float32 into memory at address

Base instruction

0x57

stind.r8

Store value of type float64 into memory at address

Base instruction

0x58

add

Add two values, returning a new value.

Base instruction

0x59

sub

Subtract value2 from value1, returning a new value.

Base instruction

0x5A

mul

Multiply values.

Base instruction

0x5B

div

Divide two values to return a quotient or floating-point result.

Base instruction

0x5C

div.un

Divide two values, unsigned, returning a quotient.

Base instruction

0x5D

rem

Remainder when dividing one value by another.

Base instruction

0x5E

rem.un

Remainder when dividing one unsigned value by another.

Base instruction

0x5F

and

Bitwise AND of two integral values, returns an integral value.

Base instruction

0x60

or

Bitwise OR of two integer values, returns an integer.

Base instruction

0x61

xor

Bitwise XOR of integer values, returns an integer.

Base instruction

0x62

shl

Shift an integer left (shifting in zeros), return an integer.

Base instruction

0x63

shr

Shift an integer right (shift in sign), return an integer.

Base instruction

0x64

shr.un

Shift an integer right (shift in zero), return an integer.

Base instruction

0x65

neg

Negate value.

Base instruction

0x66

not

Bitwise complement (logical not).

Base instruction

0x67

conv.i1

Convert to int8, pushing int32 on stack.

Base instruction

0x68

conv.i2

Convert to int16, pushing int32 on stack.

Base instruction

0x69

conv.i4

Convert to int32, pushing int32 on stack.

Base instruction

0x6A

conv.i8

Convert to int64, pushing int64 on stack.

Base instruction

0x6B

conv.r4

Convert to float32, pushing F on stack.

Base instruction

0x6C

conv.r8

Convert to float64, pushing F on stack.

Base instruction

0x6D

conv.u4

Convert to unsigned int32, pushing int32 on stack.

Base instruction

0x6E

conv.u8

Convert to unsigned int64, pushing int64 on stack.

Base instruction

0x6F

callvirt <method>

Call a method associated with an object.

Object model instruction

0x70

cpobj <typeTok>

Copy a value type from src to dest.

Object model instruction

0x71

ldobj <typeTok>

Copy the value stored at address src to the stack.

Object model instruction

0x72

ldstr <string>

Push a string object for the literal string.

Object model instruction

0x73

newobj <ctor>

Allocate an uninitialized object or value type and call ctor.

Object model instruction

0x74

castclass <class>

Cast obj to class.

Object model instruction

0x75

isinst <class>

Test if obj is an instance of class, returning null or an instance of that class or interface.

Object model instruction

0x76

conv.r.un

Convert unsigned integer to floating-point, pushing F on stack.

Base instruction

0x79

unbox <valuetype>

Extract a value-type from obj, its boxed representation.

Object model instruction

0x7A

throw

Throw an exception.

Object model instruction

0x7B

ldfld <field>

Push the value of field of object (or value type) obj, onto the stack.

Object model instruction

0x7C

ldflda <field>

Push the address of field of object obj on the stack.

Object model instruction

0x7D

stfld <field>

Replace the value of field of the object obj with value.

Object model instruction

0x7E

ldsfld <field>

Push the value of field on the stack.

Object model instruction

0x7F

ldsflda <field>

Push the address of the static field, field, on the stack.

Object model instruction

0x80

stsfld <field>

Replace the value of field with val.

Object model instruction

0x81

stobj <typeTok>

Store a value of type typeTok at an address.

Object model instruction

0x82

conv.ovf.i1.un

Convert unsigned to an int8 (on the stack as int32) and throw an exception on overflow.

Base instruction

0x83

conv.ovf.i2.un

Convert unsigned to an int16 (on the stack as int32) and throw an exception on overflow.

Base instruction

0x84

conv.ovf.i4.un

Convert unsigned to an int32 (on the stack as int32) and throw an exception on overflow.

Base instruction

0x85

conv.ovf.i8.un

Convert unsigned to an int64 (on the stack as int64) and throw an exception on overflow.

Base instruction

0x86

conv.ovf.u1.un

Convert unsigned to an unsigned int8 (on the stack as int32) and throw an exception on overflow.

Base instruction

0x87

conv.ovf.u2.un

Convert unsigned to an unsigned int16 (on the stack as int32) and throw an exception on overflow.

Base instruction

0x88

conv.ovf.u4.un

Convert unsigned to an unsigned int32 (on the stack as int32) and throw an exception on overflow.

Base instruction

0x89

conv.ovf.u8.un

Convert unsigned to an unsigned int64 (on the stack as int64) and throw an exception on overflow.

Base instruction

0x8A

conv.ovf.i.un

Convert unsigned to a native int (on the stack as native int) and throw an exception on overflow.

Base instruction

0x8B

conv.ovf.u.un

Convert unsigned to a native unsigned int (on the stack as native int) and throw an exception on overflow.

Base instruction

0x8C

box <typeTok>

Convert a boxable value to its boxed form

Object model instruction

0x8D

newarr <etype>

Create a new array with elements of type etype.

Object model instruction

0x8E

ldlen

Push the length (of type native unsigned int) of array on the stack.

Object model instruction

0x8F

ldelema <class>

Load the address of element at index onto the top of the stack.

Object model instruction

0x90

ldelem.i1

Load the element with type int8 at index onto the top of the stack as an int32.

Object model instruction

0x91

ldelem.u1

Load the element with type unsigned int8 at index onto the top of the stack as an int32.

Object model instruction

0x92

ldelem.i2

Load the element with type int16 at index onto the top of the stack as an int32.

Object model instruction

0x93

ldelem.u2

Load the element with type unsigned int16 at index onto the top of the stack as an int32.

Object model instruction

0x94

ldelem.i4

Load the element with type int32 at index onto the top of the stack as an int32.

Object model instruction

0x95

ldelem.u4

Load the element with type unsigned int32 at index onto the top of the stack as an int32.

Object model instruction

0x96

ldelem.i8

Load the element with type int64 at index onto the top of the stack as an int64.

Object model instruction

0x96

ldelem.u8

Load the element with type unsigned int64 at index onto the top of the stack as an int64 (alias for ldelem.i8).

Object model instruction

0x97

ldelem.i

Load the element with type native int at index onto the top of the stack as a native int.

Object model instruction

0x98

ldelem.r4

Load the element with type float32 at index onto the top of the stack as an F

Object model instruction

0x99

ldelem.r8

Load the element with type float64 at index onto the top of the stack as an F.

Object model instruction

0x9A

ldelem.ref

Load the element at index onto the top of the stack as an O. The type of the O is the same as the element type of the array pushed on the CIL stack.

Object model instruction

0x9B

stelem.i

Replace array element at index with the i value on the stack.

Object model instruction

0x9C

stelem.i1

Replace array element at index with the int8 value on the stack.

Object model instruction

0x9D

stelem.i2

Replace array element at index with the int16 value on the stack.

Object model instruction

0x9E

stelem.i4

Replace array element at index with the int32 value on the stack.

Object model instruction

0x9F

stelem.i8

Replace array element at index with the int64 value on the stack.

Object model instruction

0xA0

stelem.r4

Replace array element at index with the float32 value on the stack.

Object model instruction

0xA1

stelem.r8

Replace array element at index with the float64 value on the stack.

Object model instruction

0xA2

stelem.ref

Replace array element at index with the ref value on the stack.

Object model instruction

0xA3

ldelem <typeTok>

Load the element at index onto the top of the stack.

Object model instruction

0xA4

stelem <typeTok>

Replace array element at index with the value on the stack

Object model instruction

0xA5

unbox.any <typeTok>

Extract a value-type from obj, its boxed representation

Object model instruction

0xB3

conv.ovf.i1

Convert to an int8 (on the stack as int32) and throw an exception on overflow.

Base instruction

0xB4

conv.ovf.u1

Convert to an unsigned int8 (on the stack as int32) and throw an exception on overflow.

Base instruction

0xB5

conv.ovf.i2

Convert to an int16 (on the stack as int32) and throw an exception on overflow.

Base instruction

0xB6

conv.ovf.u2

Convert to an unsigned int16 (on the stack as int32) and throw an exception on overflow.

Base instruction

0xB7

conv.ovf.i4

Convert to an int32 (on the stack as int32) and throw an exception on overflow.

Base instruction

0xB8

conv.ovf.u4

Convert to an unsigned int32 (on the stack as int32) and throw an exception on overflow.

Base instruction

0xB9

conv.ovf.i8

Convert to an int64 (on the stack as int64) and throw an exception on overflow.

Base instruction

0xBA

conv.ovf.u8

Convert to an unsigned int64 (on the stack as int64) and throw an exception on overflow.

Base instruction

0xC2

refanyval <type>

Push the address stored in a typed reference.

Object model instruction

0xC3

ckfinite

Throw ArithmeticException if value is not a finite number.

Base instruction

0xC6

mkrefany <class>

Push a typed reference to ptr of type class onto the stack.

Object model instruction

0xD0

ldtoken <token>

Convert metadata token to its runtime representation.

Object model instruction

0xD1

conv.u2

Convert to unsigned int16, pushing int32 on stack.

Base instruction

0xD2

conv.u1

Convert to unsigned int8, pushing int32 on stack.

Base instruction

0xD3

conv.i

Convert to native int, pushing native int on stack.

Base instruction

0xD4

conv.ovf.i

Convert to a native int (on the stack as native int) and throw an exception on overflow.

Base instruction

0xD5

conv.ovf.u

Convert to a native unsigned int (on the stack as native int) and throw an exception on overflow.

Base instruction

0xD6

add.ovf

Add signed integer values withoverflow check.

Base instruction

0xD7

add.ovf.un

Add unsigned integer values withoverflow check.

Base instruction

0xD8

mul.ovf

Multiply signed integer values. Signed result shall fit in same size

Base instruction

0xD9

mul.ovf.un

Multiply unsigned integer values. Unsigned result shall fit in same size

Base instruction

0xDA

sub.ovf

Subtract native int from a native int. Signed result shall fit in same size

Base instruction

0xDB

sub.ovf.un

Subtract native unsigned int from a native unsigned int. Unsigned result shall fit in same size.

Base instruction

0xDC

endfault

End fault clause of an exception block.

Base instruction

0xDC

endfinally

End finally clause of an exception block.

Base instruction

0xDD

leave <int32 (target)>

Exit a protected region of code.

Base instruction

0xDE

leave.s <int8 (target)>

Exit a protected region of code, short form.

Base instruction

0xDF

stind.i

Store value of type native int into memory at address

Base instruction

0xE0

conv.u

Convert to native unsigned int, pushing native int on stack.

Base instruction

0xFE 0x00

arglist

Return argument list handle for the current method.

Base instruction

0xFE 0x01

ceq

Push 1 (of type int32) if value1 equals value2, else push 0.

Base instruction

0xFE 0x02

cgt

Push 1 (of type int32) if value1 > value2, else push 0.

Base instruction

0xFE 0x03

cgt.un

Push 1 (of type int32) if value1 > value2, unsigned or unordered, else push 0.

Base instruction

0xFE 0x04

clt

Push 1 (of type int32) if value1 < value2, else push 0.

Base instruction

0xFE 0x05

clt.un

Push 1 (of type int32) if value1 < value2, unsigned or unordered, else push 0.

Base instruction

0xFE 0x06

ldftn <method>

Push a pointer to a method referenced by method, on the stack.

Base instruction

0xFE 0x07

ldvirtftn <method>

Push address of virtual method on the stack.

Object model instruction

0xFE 0x09

ldarg <uint16 (num)>

Load argument numbered num onto the stack.

Base instruction

0xFE 0x0A

ldarga <uint16 (argNum)>

Fetch the address of argument argNum.

Base instruction

0xFE 0x0B

starg <uint16 (num)>

Store value to the argument numbered num.

Base instruction

0xFE 0x0C

ldloc <uint16 (indx)>

Load local variable of index indx onto stack.

Base instruction

0xFE 0x0D

ldloca <uint16 (indx)>

Load address of local variable with index indx.

Base instruction

0xFE 0x0E

stloc <uint16 (indx)>

Pop a value from stack into local variable indx.

Base instruction

0xFE 0x0F

localloc

Allocate space from the local memory pool.

Base instruction

0xFE 0x11

endfilter

End an exception handling filter clause.

Base instruction

0xFE 0x12

unaligned. (alignment)

Subsequent pointer instruction might be unaligned.

Prefix to instruction

0xFE 0x13

volatile.

Subsequent pointer reference isvolatile.

Prefix to instruction

0xFE 0x14

tail.

Subsequent call terminates current method

Prefix to instruction

0xFE 0x15

initobj <typeTok>

Initialize the value at address dest.

Object model instruction

0xFE 0x16

constrained. <thisType>

Call a virtual method on a type constrained to be type T

Prefix to instruction

0xFE 0x17

cpblk

Copy data from memory to memory.

Base instruction

0xFE 0x18

initblk

Set all bytes in a block of memory to a given byte value.

Base instruction

0xFE 0x19

no. {

 typecheck,

 rangecheck,

 nullcheck

 }

The specified fault check(s) normally performed as part of the execution of the subsequent instruction can/shall be skipped.

Prefix to instruction

0xFE 0x1A

rethrow

Rethrow the current exception.

Object model instruction

0xFE 0x1C

sizeof <typeTok>

Push the size, in bytes, of a type as an unsigned int32.

Object model instruction

0xFE 0x1D

refanytype

Push the type token stored in a typed reference.

Object model instruction

0xFE 0x1E

readonly.

Specify that the subsequent array address operation performs no type check at runtime, and that it returns a controlled-mutability managed pointer

Prefix to instruction

相關文章
相關標籤/搜索