不知道大家对于Common Language Infrastructure有什么认识呢?“噢!天啊!看到那么几个英文我就头痛了!”如果真是这样,那么你就没有办法继续看下去了,因为这里面的东西基本上只能够找到英文的资料。
| |
|
|
0000004c 8B 54 24 10 mov edx,dword ptr [esp+10h] 00000050 03 54 24 14 add edx,dword ptr [esp+14h] 00000054 03 54 24 18 add edx,dword ptr [esp+18h] 00000058 03 54 24 1C add edx,dword ptr [esp+1Ch] 0000005c 03 54 24 20 add edx,dword ptr [esp+20h] 00000060 03 D5 add edx,ebp 00000062 03 D6 add edx,esi 00000064 03 D3 add edx,ebx 00000066 03 D7 add edx,edi 00000068 89 54 24 10 mov dword ptr [esp+10h],edx | IL_0000: 06 ldloc.0 // a IL_0001: 07 ldloc.1 // b IL_0002: 08 ldloc.2 // c IL_0003: 09 ldloc.3 // d IL_0004: 11 04 ldloc.s e IL_0006: 11 05 ldloc.s f IL_0008: 11 06 ldloc.s g IL_000A: 11 07 ldloc.s h IL_000C: 11 08 ldloc.s i IL_000E: 58 add // stack[top] = stack[top--] + stack[top--] = stack[top] = h + i; IL_000F: 58 add // stack[top] = g + h + i IL_0010: 58 add // = f + g + h + i IL_0011: 58 add // = e + f + g + h + i IL_0012: 58 add // = d + e + f + g + h + i IL_0013: 58 add // = c + d + e + f + g + h + i IL_0014: 58 add // = b + c + d + e + f + g + h + i IL_0015: 58 add // = a + b + c + d + e + f + g + h + i IL_0016: 0A stloc.0 // a = ... |
简单点讲,阅读cil有些什么技巧呢?我觉得需要注意这么几点:
- 牢记这是一个栈式机,所有指令都和栈有关。
- 注意当前函数是否为静态函数
- 就这么多了
难道您只想知道这么多吗?不想知道CLI包括些什么东西吗?甚至连实际读一次IL都不想试一下吗?

文章来源: http://dotnet.blogger.cn/sumtec/archive/2004/03/04/216.aspx