示例#1
0
 public void CmpPtrIntPtrInt()
 {
     Pointer p1 = new Pointer(PrimitiveType.Int32, 4);
     Pointer p2 = new Pointer(PrimitiveType.Int32, 4);
     DataTypeComparer c = new DataTypeComparer();
     Assert.AreEqual(0, c.Compare(p1, p2));
 }
 public TypedExpressionRewriter(Program program)
 {
     this.program = program;
     this.globals = program.Globals;
     this.compTypes = new DataTypeComparer();
     this.tcr = new TypedConstantRewriter(program);
     this.m = new ExpressionEmitter();
     this.unifier = new Unifier();
 }
示例#3
0
 public void CmpRecursiveEqualStructs()
 {
     // struct str1{struct *str2} == struct str2{struct *str1}
     StructureType s1 = new StructureType();
     StructureType s2 = new StructureType();
     s1.Fields.Add(0, new Pointer(s2, 4));
     s2.Fields.Add(0, new Pointer(s1, 4));
     DataTypeComparer c = new DataTypeComparer();
     Assert.AreEqual(0, c.Compare(s1, s2));
 }
示例#4
0
 public TypedExpressionRewriter(Program program, DecompilerEventListener eventListener)
 {
     this.program = program;
     this.globals = program.Globals;
     this.eventListener = eventListener;
     this.compTypes = new DataTypeComparer();
     this.tcr = new TypedConstantRewriter(program, eventListener);
     this.m = new ExpressionEmitter();
     this.unifier = new Unifier();
 }
		public TypedExpressionRewriter(Program prog)
		{
            this.prog = prog;
            this.platform = prog.Platform;
			this.store = prog.TypeStore;
            this.globals = prog.Globals;
			this.compTypes = new DataTypeComparer();
			this.tcr = new TypedConstantRewriter(prog);
            this.m = new ExpressionEmitter();
            this.unifier = new Unifier();
		}
示例#6
0
        public void CmpUnionToUnion()
        {
            //Warning : inner types were selected in such a way as to force UnionAlternativeCollection
            // to place them in provided order.
            DataType inner1 = PrimitiveType.UInt32;
            DataType inner2 = PrimitiveType.UInt16;
            DataType inner3 = PrimitiveType.UInt8;
            UnionType u1 = new UnionType("Union1",inner1,inner3,inner1);
            UnionType u2 = new UnionType("Union1",inner1,inner3,inner2);

            DataTypeComparer c = new DataTypeComparer();
            Assert.AreNotEqual(0, c.Compare(u1, u2));
        }
示例#7
0
        public void Dtcmp_Functions()
        {
            var sig1 = new FunctionType(
                new Identifier("", PrimitiveType.Int32, null),
                new Identifier("arg1", PrimitiveType.Real64, null));
            var sig2 = new FunctionType(
                new Identifier("", PrimitiveType.Int32, null),
                new Identifier("arg1", PrimitiveType.Real64, null));
            var dtcmp = new DataTypeComparer();

            Assert.AreEqual(dtcmp.GetHashCode(sig1), dtcmp.GetHashCode(sig2));
            Assert.AreEqual(0, dtcmp.Compare(sig1, sig2));
        }
示例#8
0
        public void CmpUnionToUnion()
        {
            //Warning : inner types were selected in such a way as to force UnionAlternativeCollection
            // to place them in provided order.
            DataType inner1 = PrimitiveType.UInt32;
            DataType inner2 = PrimitiveType.UInt16;
            DataType inner3 = PrimitiveType.UInt8;
            UnionType u1 = new UnionType("Union1", inner1, inner3, inner1);
            UnionType u2 = new UnionType("Union1", inner1, inner3, inner2);

            DataTypeComparer c = new DataTypeComparer();
            Assert.AreNotEqual(0, c.Compare(u1, u2));
        }
示例#9
0
 public void CmpRecursiveNotEqualStructs()
 {
     // struct str1{struct *str2; int f1} != struct str2{struct *str1; float f2}
     DataType u32 = PrimitiveType.UInt32;
     DataType r32 = PrimitiveType.Real32;
     StructureType s1 = new StructureType();
     StructureType s2 = new StructureType();
     s1.Fields.Add(0, new Pointer(s2, 32));
     s1.Fields.Add(4, u32);
     s2.Fields.Add(0, new Pointer(s1, 32));
     s2.Fields.Add(4, r32);
     DataTypeComparer c = new DataTypeComparer();
     Assert.AreNotEqual(0, c.Compare(s1, s2));
     Assert.AreNotEqual(0, c.Compare(r32, u32));
 }
示例#10
0
 public void CmpRecursiveNotEqualStructs()
 {
     // struct str1{struct *str2; int f1} != struct str2{struct *str1; float f2}
     DataType u32 = PrimitiveType.UInt32;
     DataType r32 = PrimitiveType.Real32;
     StructureType s1 = new StructureType();
     StructureType s2 = new StructureType();
     s1.Fields.Add(0, new Pointer(s2, 4));
     s1.Fields.Add(4, u32);
     s2.Fields.Add(0, new Pointer(s1, 4));
     s2.Fields.Add(4, r32);
     DataTypeComparer c = new DataTypeComparer();
     Assert.AreNotEqual(0, c.Compare(s1, s2));
     Assert.AreNotEqual(0, c.Compare(r32, u32));
 }
示例#11
0
 public ComplexExpressionBuilder(
     DataType dtResult,
     DataType dt,
     DataType dtOrig,
     Expression basePointer,
     Expression complexExp,
     Expression indexExp,
     int offset)
 {
     this.dtResult    = dtResult;
     this.dt          = dt;
     this.dtOriginal  = dtOrig;
     this.basePointer = basePointer;
     this.complexExp  = complexExp;
     this.indexExp    = indexExp;
     this.offset      = offset;
     this.comp        = new DataTypeComparer();
 }
示例#12
0
 public GlobalDataWriter(Program program, IServiceProvider services)
 {
     this.program  = program;
     this.services = services;
     this.cmp      = new DataTypeComparer();
 }