修复EvalStackCalculator计算isinst和castclass指令的返回值的类型未转换为token所引用的类型的bug

main
walon 2025-07-31 12:14:18 +08:00
parent 9b6e6375f6
commit 2e48164ae9
1 changed files with 5 additions and 2 deletions

View File

@ -713,7 +713,10 @@ namespace Obfuz.Emit
} }
case Code.Castclass: case Code.Castclass:
{ {
PushStack(newPushedDatas, (ITypeDefOrRef)inst.Operand); Assert.IsTrue(stackSize > 0);
var obj = stackDatas[stackSize - 1];
Assert.IsTrue(obj.type == EvalDataType.Ref);
PushStack(newPushedDatas, new EvalDataTypeWithSig(EvalDataType.Ref, ((ITypeDefOrRef)inst.Operand).ToTypeSig()));
break; break;
} }
case Code.Isinst: case Code.Isinst:
@ -721,7 +724,7 @@ namespace Obfuz.Emit
Assert.IsTrue(stackSize > 0); Assert.IsTrue(stackSize > 0);
var obj = stackDatas[stackSize - 1]; var obj = stackDatas[stackSize - 1];
Assert.IsTrue(obj.type == EvalDataType.Ref); Assert.IsTrue(obj.type == EvalDataType.Ref);
PushStack(newPushedDatas, obj); PushStack(newPushedDatas, new EvalDataTypeWithSig(EvalDataType.Ref, ((ITypeDefOrRef)inst.Operand).ToTypeSig()));
break; break;
} }
case Code.Unbox: case Code.Unbox: