void Decode_multiple_instrs_with_one_instance() { var reader16 = new DecodeMultipleCodeReader(); var reader32 = new DecodeMultipleCodeReader(); var reader64 = new DecodeMultipleCodeReader(); var decoderDict16 = new Dictionary <DecoderOptions, Decoder>(); var decoderDict32 = new Dictionary <DecoderOptions, Decoder>(); var decoderDict64 = new Dictionary <DecoderOptions, Decoder>(); foreach (var info in DecoderTestUtils.GetDecoderTests(includeOtherTests: false, includeInvalid: true)) { var data = HexUtils.ToByteArray(info.HexBytes); var decoder = Decoder.Create(info.Bitness, new ByteArrayCodeReader(data), info.Options); Decoder decoderAll; switch (info.Bitness) { case 16: decoder.IP = DecoderConstants.DEFAULT_IP16; reader16.SetArray(data); if (!decoderDict16.TryGetValue(info.Options, out decoderAll)) { decoderDict16.Add(info.Options, decoderAll = Decoder.Create(info.Bitness, reader16, info.Options)); } break; case 32: decoder.IP = DecoderConstants.DEFAULT_IP32; reader32.SetArray(data); if (!decoderDict32.TryGetValue(info.Options, out decoderAll)) { decoderDict32.Add(info.Options, decoderAll = Decoder.Create(info.Bitness, reader32, info.Options)); } break; case 64: decoder.IP = DecoderConstants.DEFAULT_IP64; reader64.SetArray(data); if (!decoderDict64.TryGetValue(info.Options, out decoderAll)) { decoderDict64.Add(info.Options, decoderAll = Decoder.Create(info.Bitness, reader64, info.Options)); } break; default: throw new InvalidOperationException(); } decoderAll.IP = decoder.IP; var instruction1 = decoder.Decode(); var instruction2 = decoderAll.Decode(); var co1 = decoder.GetConstantOffsets(instruction1); var co2 = decoderAll.GetConstantOffsets(instruction2); Assert.Equal(info.Code, instruction1.Code); Assert.True(Instruction.EqualsAllBits(instruction1, instruction2)); VerifyConstantOffsets(co1, co2); } }
void Decode_multiple_instrs_with_one_instance() { var reader16 = new DecodeMultipleCodeReader(); var reader32 = new DecodeMultipleCodeReader(); var reader64 = new DecodeMultipleCodeReader(); var decoderDict16 = new Dictionary <DecoderOptions, Decoder>(); var decoderDict32 = new Dictionary <DecoderOptions, Decoder>(); var decoderDict64 = new Dictionary <DecoderOptions, Decoder>(); foreach (var info in DecoderTestUtils.GetDecoderTests(needHexBytes: true, includeOtherTests: false)) { var data = HexUtils.ToByteArray(info.HexBytes); var decoder = Decoder.Create(info.Bitness, new ByteArrayCodeReader(data), info.Options); Decoder decoderAll; switch (info.Bitness) { case 16: decoder.InstructionPointer = DecoderConstants.DEFAULT_IP16; reader16.SetArray(data); if (!decoderDict16.TryGetValue(info.Options, out decoderAll)) { decoderDict16.Add(info.Options, decoderAll = Decoder.Create16(reader16, info.Options)); } break; case 32: decoder.InstructionPointer = DecoderConstants.DEFAULT_IP32; reader32.SetArray(data); if (!decoderDict32.TryGetValue(info.Options, out decoderAll)) { decoderDict32.Add(info.Options, decoderAll = Decoder.Create32(reader32, info.Options)); } break; case 64: decoder.InstructionPointer = DecoderConstants.DEFAULT_IP64; reader64.SetArray(data); if (!decoderDict64.TryGetValue(info.Options, out decoderAll)) { decoderDict64.Add(info.Options, decoderAll = Decoder.Create64(reader64, info.Options)); } break; default: throw new InvalidOperationException(); } decoderAll.InstructionPointer = decoder.InstructionPointer; var instr1 = decoder.Decode(); var instr2 = decoderAll.Decode(); Assert.Equal(info.Code, instr1.Code); Assert.True(Instruction.TEST_BitByBitEquals(instr1, instr2)); } }
void Decode_multiple_instrs_with_one_instance() { var reader16 = new DecodeMultipleCodeReader(); var reader32 = new DecodeMultipleCodeReader(); var reader64 = new DecodeMultipleCodeReader(); var decoderAll16 = Decoder.Create16(reader16); var decoderAll32 = Decoder.Create32(reader32); var decoderAll64 = Decoder.Create64(reader64); foreach (var info in DecoderTestUtils.GetDecoderTests(needHexBytes: true, includeOtherTests: false)) { var data = HexUtils.ToByteArray(info.HexBytes); var decoder = Decoder.Create(info.Bitness, new ByteArrayCodeReader(data)); Decoder decoderAll; switch (info.Bitness) { case 16: decoder.InstructionPointer = DecoderConstants.DEFAULT_IP16; reader16.SetArray(data); decoderAll = decoderAll16; break; case 32: decoder.InstructionPointer = DecoderConstants.DEFAULT_IP32; reader32.SetArray(data); decoderAll = decoderAll32; break; case 64: decoder.InstructionPointer = DecoderConstants.DEFAULT_IP64; reader64.SetArray(data); decoderAll = decoderAll64; break; default: throw new InvalidOperationException(); } decoderAll.InstructionPointer = decoder.InstructionPointer; var instr1 = decoder.Decode(); var instr2 = decoderAll.Decode(); Assert.Equal(info.Code, instr1.Code); Assert.True(Instruction.TEST_BitByBitEquals(ref instr1, ref instr2)); } }