我已经使用telerik JD反汇编了一些代码,我注意到一些标签被省略了,部分代码也没用了。
IL:
.method assembly hidebysig instance void xxx (
int32 p_intPer
) cil managed noinlining
{
IL_0000: br.s IL_000a
IL_0002: call
IL_0007: ldnull
IL_0008: ldind.ref
IL_0009: pop
IL_000a: ldc.i4.0
IL_000b: brtrue.s IL_0007
.try
{
IL_000d: ldarg.0
IL_000e: ldfld class [Reader]aaa bbb::getP
IL_0013: brfalse IL_0024
IL_0018: ldarg.0
IL_0019: ldfld class [Reader]aaa bbb::getP
IL_001e: ldarg.1
IL_001f: callvirt instance void [Reader]aaa::Invoke(int32)
IL_0024: leave IL_002f
}
catch [mscorlib]System.Object
{
IL_0029: pop
IL_002a: leave IL_002f
}
IL_002f: ret
}
C#:
internal void xxx(int per)
{
while (0 != 0) { }
try
{
if (this.getP != null)
{
this.getP(per);
}
}
catch { }
}
我的意思是IL_0000 -> IL_0002 -> IL_0007
反编译器是愚蠢的,还是正常的? 另外,我在IL方面不是很熟练,但这对我来说并不像C#的实际来源
答案 0 :(得分:2)
标签中的数字是以下指令的方法体中的偏移量。但并非每个指令和操作数都具有相同的大小。
答案 1 :(得分:1)
标签偶尔跳过几个数字是正常的,而不是每条指令都有相同的大小。