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