最初阅读IL的时候,很多指令会记不住,你把以下这两个表格打印下来,备在案前,可供速查!
最初我阅读IL时,就是这么做的。后来我教别人反编译,都要别人先打印这份表格。
自己查文档也可以获得一下资料。不过,或许我整理的这个表格,速查更方便!
下载地址:http://files.cnblogs.com/jobs/msil.rar
|
Instruction
|
Description
|
Stack Transition
|
1
|
add
|
add two values, returning a new value
|
…, value1, value2à…, result
|
2
|
add.ovf.<signed>
|
add integer value with overflow check
|
…, value1, value2à…, result
|
3
|
and
|
bitwise AND
|
…, value1, value2 à…, result
|
4
|
arglist
|
get argument list
|
… à …, argListHandle
|
5
|
beq.<length>
|
branch on equal
|
…, value1, value2 à …
|
6
|
bge.<length>
|
branch on greater than or equal to
|
…, value1, value2 à …
|
7
|
bge.un.<length>
|
branch on greater/equal, unsigned or unordered
|
…, value1, value2 à …
|
8
|
bgt.<length>
|
branch on greater than
|
…, value1, value2 à …
|
9
|
bgt.un<length>
|
branch on greater than, unsigned or unordered
|
…, value1, value2 à …
|
10
|
ble.<length>
|
branch on less than or equal to
|
…, value1, value2 à …
|
11
|
ble..un<length>
|
branch on less/equal, unsigned or unordered
|
…, value1, value2 à …
|
12
|
blt.<length>
|
branch on less than
|
…, value1, value2 à …
|
13
|
blt.un.<length>
|
branch on less than, unsigned or unordered
|
…, value1, value2 à …
|
14
|
bne.un<length>
|
branch on not equal or unorded
|
…, value1, value2 à …
|
15
|
br.<length>
|
unconditional branch
|
…, à …
|
16
|
break
|
breakpoint instruction
|
…, à …
|
17
|
brfalse.<length>
|
branch on false, null, or zero
|
…, value à …
|
18
|
brtrue.<length>
|
branch on non-false or non-null
|
…, value à …
|
19
|
call
|
call a method
|
…, arg1, arg2 … argn à …, retVal (not always returned)
|
20
|
calli
|
indirect method call
|
…, arg1, arg2 … argn, ftn à …, retVal (not always returned)
|
21
|
ceq
|
compare equal
|
…, value1, value2à…, result
|
22
|
cgt
|
compare greater than
|
…, value1, value2à…, result
|
23
|
cgt.un
|
compare greater than, unsigned or unordered
|
…, value1, value2à…, result
|
24
|
ckfinite
|
check for a finite real number
|
…, value à …, value
|
25
|
clt
|
compare less than
|
…, value1, value2à…, result
|
26
|
clt.un
|
compare less than, unsigned or unordered
|
…, value1, value2à…, result
|
27
|
conv.<to type>
|
data conversion
|
…, value à …, result
|
28
|
conv.ovf<to type>
|
data conversion with overflow detection
|
…, value à …, result
|
29
|
conv.ovf.<to type>.un
|
unsigned data conversion with overflow detection
|
…, value à …, result
|
30
|
cpblk
|
copy data from memory to memory
|
…, destaddr, srcaddr, size à …
|
31
|
div
|
divide values
|
…, value1, value2à…, result
|
32
|
div.un
|
divide integer values, unsigned
|
…, value1, value2à…, result
|
33
|
dup
|
duplicate the top value of the stack
|
…, value à …, value, value
|
34
|
endfilter
|
end filter clause of SEH
|
…, value à …
|
35
|
endfinally
|
end the finally or fault clause of exception block
|
… à …
|
36
|
initblk
|
initialize a block of memory to a value
|
…, addr, value, size à …
|
37
|
jmp
|
jump to method
|
… à …
|
38
|
ldarg.<length>
|
load argument onto the stack
|
… à …, value
|
39
|
ldarga.<length>
|
load an argument address
|
…, à …, address of argument number argNum
|
40
|
ldc.<type>
|
load numeric constant
|
… à …, num
|
41
|
ldftn
|
load method pointer
|
… à …, ftn
|
42
|
ldind.<type>
|
load value indirect onto the stack
|
…, addr à …, value
|
43
|
ldloc
|
load local variable onto the stack
|
… à …, value
|
44
|
ldloca.<length>
|
load local variable address
|
… à …, address
|
45
|
ldnull
|
load a null pointer
|
… à …, null value
|
46
|
leave.<length>
|
exit a protected region of code
|
…, à
|
47
|
localloc
|
allocate space in the local dynamic memory pool
|
size à address
|
48
|
mul
|
multiply values
|
…, value1, value2 à …, result
|
49
|
mul.ovf<type>
|
multiply integer values with overflow check
|
…, value1, value2 à …, result
|
50
|
neg
|
negate
|
…, value à …, result
|
51
|
nop
|
no operation
|
…, à …,
|
52
|
not
|
bitwise complement
|
…, value à …, result
|
53
|
or
|
bitwise OR
|
…, value1, value2 à …, result
|
54
|
pop
|
remove the top element of the stack
|
…, value à …
|
55
|
rem
|
compute the remainder
|
…, value1, value2 à …, result
|
56
|
rem.un
|
compute integer remainder, unsigned
|
…, value1, value2 à …, result
|
57
|
ret
|
return from method
|
retVal on callee evaluation stack (not always present) à
…, retVal on caller evaluation stack (not always present)
|
58
|
shl
|
shift integer left
|
…, value, shiftAmount à …, result
|
59
|
shr
|
shift integer right
|
…, value, shiftAmount à …, result
|
60
|
shr.un
|
shift integer right, unsigned
|
…, value, shiftAmount à …, result
|
61
|
starg.<length>
|
store a value in an argument slot
|
…, value à …,
|
62
|
stind.<type>
|
store value indirect from stack
|
…, addr, val à …
|
63
|
stloc
|
pop value from stack to local variable
|
…, value à …
|
64
|
sub
|
substract numeric values
|
…, value1, value2 à …, result
|
65
|
sub.ovf.<type>
|
substract integer values, checking for overflow
|
…, value1, value2 à …, result
|
66
|
switch
|
table switch on value
|
…, value à …,
|
67
|
xor
|
bitwise XOR
|
..., value1, value2 à ..., result
|
|
Instruction
|
Description
|
Stack Transition
|
1
|
box
|
convert value type to object reference
|
…, valueType à …, obj
|
2
|
callvirt
|
call a method associated, a runtime, with an object
|
…, obj, arg1, … argN à …, returnVal (not always returned)
|
3
|
cast class
|
cast an object to a class
|
…, obj à …, obj2
|
4
|
cpobj
|
copy a value type
|
…, destValObj, srcValObj à …,
|
5
|
initobj
|
Initialize a value type
|
…,addrOfValObj à …,
|
6
|
isinst
|
test if an object is is an instance of a class or interface
|
…, obj à …, result
|
7
|
ldelem.<type>
|
load an element fo an array
|
…, array, index à …, value
|
8
|
ldelema
|
load address of an element of an array
|
…, array, index à …, address
|
9
|
ldfld
|
load field of an object
|
…, obj à …, value
|
10
|
ldflda
|
load field address
|
…, obj à …, address
|
11
|
ldlen
|
load the length of an array
|
…, array à …, length
|
12
|
ldobj
|
copy value type to the stack
|
…, addrOfValObj à …, valObj
|
13
|
ldsfld
|
load static field of a class
|
…, à …, value
|
14
|
ldsflda
|
load static field address
|
…, à …, address
|
15
|
ldstr
|
load a literal string
|
…, à …, string
|
16
|
ldtoken
|
load the runtime representation of metadata token
|
… à …, RuntimeHandle
|
17
|
ldvirtfn
|
load a virtual method pointer
|
… object à …, ftn
|
18
|
mkrefany
|
push a typed reference on the stack
|
…, ptr à …, typedRef
|
19
|
newarr
|
Create a zero-base, on-dimensional array
|
…, numElems à …, array
|
20
|
newobj
|
create a new object
|
…, arg1, … argN à …, obj
|
21
|
refanytype
|
load the type out of a typed reference
|
…, TypedRef à …, type
|
22
|
refanyval
|
load the address out of a typed reference
|
…, TypedRef à …, address
|
23
|
rethrow
|
rethrow the current exception
|
…, à …,
|
24
|
sizeof
|
load the size in bytes of a value type
|
…, à …, size (4 bytes, unsigned)
|
25
|
stelem.<type>
|
store an element of an array
|
…, array, index, value à …,
|
26
|
stfld
|
store into a field of an object
|
…, obj, value à …,
|
27
|
stobj
|
store a value type from the stack into memory
|
…, addr, valObj à …,
|
28
|
stsfld
|
store a static field of class
|
…, val à …,
|
29
|
throw
|
throw an exception
|
…, object à …,
|
30
|
unbox
|
convert boxed value type to its raw form
|
|