-
-
[求助]请教.NET反编译和MSIL的问题
-
发表于:
2011-10-9 18:16
5163
-
初次对.NET的程序进行反编译,也不知道有什么debugger可以用,所以有些地方不是很清楚。
分别使用了reflector和IDA,结果如下:
private void a(i.a A_0)
{
// This item is obfuscated and can not be translated.
int num;
bool flag;
goto Label_0037;
Label_0005:
switch (num)
{
……
}
Label_0037:
this.d.Text = "";
flag = A_0 != i.a.a;
num = 3;
goto Label_0005;
if (1 != 0) { }
num = 7;
goto Label_0005;
}
---------------------------------------------------------------------------------------------------------------------------
38 32 00 00 00 br loc_25F7
……
loc_25F7: // CODE XREF: sub_25C0j
00 nop
02 ldarg.0
7B 22 00 00 04 ldfld class [System.Windows.Forms]System.Windows.Forms.Label i::d
72 B1 00 00 70 ldstr ""
6F 6F 00 00 0A callvirt void [System.Windows.Forms]System.Windows.Forms.Control::set_Text(class System.String)
00 nop
03 ldarg.1
16 ldc.i4.0
FE 01 ceq
16 ldc.i4.0
FE 01 ceq
0B stloc.1
19 ldc.i4.3
0A stloc.0
2B B0 br.s loc_25C5
---------------------------------------------------------------------------------------------------------------------------
问题1:在这里arg0,arg1分别是i.a和A_0吗?
问题2:ceq前的ldc.i4.0有什么用?
push arg.0
this.d.Text = "";
push arg.1
push 0
ceq
这时堆栈里应该有3个值,分别是arg0, arg1和0,那么ceq的对象应该是arg1和0才对,为什么会是A_0 == i.a.a呢?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课