修复 EvalDataTypeWithSig计算ldarga等取引用的指令的栈数据类型未包含具体类型的bug
parent
0889f730fd
commit
c3c53b2797
|
@ -348,7 +348,7 @@ namespace Obfuz.Emit
|
||||||
case Code.Ldarga:
|
case Code.Ldarga:
|
||||||
case Code.Ldarga_S:
|
case Code.Ldarga_S:
|
||||||
{
|
{
|
||||||
PushStack(newPushedDatas, EvalDataType.I);
|
PushStackPointer(newPushedDatas, new ByRefSig(inst.GetParameter(_method.Parameters).Type));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Code.Ldloc_0:
|
case Code.Ldloc_0:
|
||||||
|
@ -364,7 +364,7 @@ namespace Obfuz.Emit
|
||||||
case Code.Ldloca:
|
case Code.Ldloca:
|
||||||
case Code.Ldloca_S:
|
case Code.Ldloca_S:
|
||||||
{
|
{
|
||||||
PushStack(newPushedDatas, EvalDataType.I);
|
PushStackPointer(newPushedDatas, new ByRefSig(inst.GetLocal(body.Variables).Type));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Code.Stloc_0:
|
case Code.Stloc_0:
|
||||||
|
@ -522,7 +522,7 @@ namespace Obfuz.Emit
|
||||||
case Code.Ldind_I:
|
case Code.Ldind_I:
|
||||||
{
|
{
|
||||||
Assert.IsTrue(stackSize > 0);
|
Assert.IsTrue(stackSize > 0);
|
||||||
PushStack(newPushedDatas, EvalDataType.I);
|
PushStackPointer(newPushedDatas, corLibTypes.IntPtr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Code.Ldind_Ref:
|
case Code.Ldind_Ref:
|
||||||
|
@ -648,7 +648,7 @@ namespace Obfuz.Emit
|
||||||
case Code.Conv_I:
|
case Code.Conv_I:
|
||||||
case Code.Conv_U:
|
case Code.Conv_U:
|
||||||
{
|
{
|
||||||
PushStack(newPushedDatas, EvalDataType.I);
|
PushStackPointer(newPushedDatas, corLibTypes.IntPtr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Code.Conv_R4:
|
case Code.Conv_R4:
|
||||||
|
@ -690,7 +690,7 @@ namespace Obfuz.Emit
|
||||||
case Code.Conv_Ovf_U:
|
case Code.Conv_Ovf_U:
|
||||||
case Code.Conv_Ovf_U_Un:
|
case Code.Conv_Ovf_U_Un:
|
||||||
{
|
{
|
||||||
PushStack(newPushedDatas, EvalDataType.I);
|
PushStackPointer(newPushedDatas, corLibTypes.IntPtr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Code.Conv_R_Un:
|
case Code.Conv_R_Un:
|
||||||
|
@ -776,7 +776,9 @@ namespace Obfuz.Emit
|
||||||
case Code.Ldflda:
|
case Code.Ldflda:
|
||||||
case Code.Ldsflda:
|
case Code.Ldsflda:
|
||||||
{
|
{
|
||||||
PushStack(newPushedDatas, EvalDataType.I);
|
IField field = (IField)inst.Operand;
|
||||||
|
TypeSig fieldType = MetaUtil.InflateFieldSig(field, gac);
|
||||||
|
PushStackPointer(newPushedDatas, new ByRefSig(fieldType));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Code.Stfld:
|
case Code.Stfld:
|
||||||
|
@ -822,7 +824,7 @@ namespace Obfuz.Emit
|
||||||
case Code.Ldelem_I:
|
case Code.Ldelem_I:
|
||||||
{
|
{
|
||||||
Assert.IsTrue(stackSize >= 2);
|
Assert.IsTrue(stackSize >= 2);
|
||||||
PushStack(newPushedDatas, EvalDataType.I);
|
PushStackPointer(newPushedDatas, corLibTypes.IntPtr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Code.Ldelem_R4:
|
case Code.Ldelem_R4:
|
||||||
|
@ -875,7 +877,7 @@ namespace Obfuz.Emit
|
||||||
case Code.Refanyval:
|
case Code.Refanyval:
|
||||||
{
|
{
|
||||||
Assert.IsTrue(stackSize > 0);
|
Assert.IsTrue(stackSize > 0);
|
||||||
PushStack(newPushedDatas, EvalDataType.I);
|
PushStackPointer(newPushedDatas, corLibTypes.IntPtr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Code.Ldtoken:
|
case Code.Ldtoken:
|
||||||
|
@ -905,7 +907,7 @@ namespace Obfuz.Emit
|
||||||
}
|
}
|
||||||
case Code.Localloc:
|
case Code.Localloc:
|
||||||
{
|
{
|
||||||
PushStack(newPushedDatas, EvalDataType.I);
|
PushStackPointer(newPushedDatas, corLibTypes.IntPtr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Code.Unaligned:
|
case Code.Unaligned:
|
||||||
|
|
Loading…
Reference in New Issue