本文整理汇总了C#中FileUnitTester类的典型用法代码示例。如果您正苦于以下问题:C# FileUnitTester类的具体用法?C# FileUnitTester怎么用?C# FileUnitTester使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
FileUnitTester类属于命名空间,在下文中一共展示了FileUnitTester类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: VnSumTest
//[Test]
public void VnSumTest()
{
Program prog = RewriteCodeFragment(
@".i86
push bp
mov bp,sp
mov dx,3
add dx,dx
mov bx,3
lea dx,[bx+3]
mov sp,bp
pop bp
ret
");
using (FileUnitTester fut = new FileUnitTester("Analysis/VnSumTest.txt"))
{
Procedure proc = prog.Procedures.Values[0];
Aliases alias = new Aliases(proc, prog.Architecture);
alias.Transform();
var gr = proc.CreateBlockDominatorGraph();
SsaTransform sst = new SsaTransform(
new ProgramDataFlow(),
proc,
null,
gr,
new HashSet<RegisterStorage>());
SsaState ssa = sst.SsaState;
ValueNumbering vn = new ValueNumbering(ssa.Identifiers);
DumpProc(proc, ssa, fut.TextWriter);
vn.Write(fut.TextWriter);
fut.AssertFilesEqual();
}
}
示例2: PerformTest
private void PerformTest(FileUnitTester fut)
{
DataFlowAnalysis dfa = new DataFlowAnalysis(program, null, new FakeDecompilerEventListener());
dfa.UntangleProcedures();
foreach (Procedure proc in program.Procedures.Values)
{
Aliases alias = new Aliases(proc, program.Architecture);
alias.Transform();
SsaTransform sst = new SsaTransform(
dfa.ProgramDataFlow,
proc,
null,
proc.CreateBlockDominatorGraph(),
program.Platform.CreateImplicitArgumentRegisters());
SsaState ssa = sst.SsaState;
proc.Write(false, fut.TextWriter);
fut.TextWriter.WriteLine();
OutParameterTransformer opt = new OutParameterTransformer(proc, ssa.Identifiers);
opt.Transform();
DeadCode.Eliminate(proc, ssa);
proc.Write(false, fut.TextWriter);
fut.TextWriter.WriteLine("====================");
}
}
示例3: VnMemoryTest
//[Test]
public void VnMemoryTest()
{
Program prog = RewriteCodeFragment(
@".i86
mov word ptr [bx+2],0
mov si,[bx+4]
mov ax,[bx+2]
mov cx,[bx+2]
mov dx,[bx+4]
ret
");
using (FileUnitTester fut = new FileUnitTester("Analysis/VnMemoryTest.txt"))
{
Procedure proc = prog.Procedures.Values[0];
var gr = proc.CreateBlockDominatorGraph();
Aliases alias = new Aliases(proc, prog.Architecture);
alias.Transform();
SsaTransform sst = new SsaTransform(new ProgramDataFlow(), proc, gr);
SsaState ssa = sst.SsaState;
ValueNumbering vn = new ValueNumbering(ssa.Identifiers);
DumpProc(proc, ssa, fut.TextWriter);
vn.Write(fut.TextWriter);
fut.AssertFilesEqual();
}
}
示例4: RunTest
protected override void RunTest(Program program, string outputFile)
{
FileUnitTester fut = null;
try
{
fut = new FileUnitTester(outputFile);
var factory = program.TypeFactory;
var store = program.TypeStore;
var aen = new ExpressionNormalizer(program.Platform.PointerType);
var eqb = new EquivalenceClassBuilder(factory, store);
var tyco = new TypeCollector(factory, store, program);
aen.Transform(program);
eqb.Build(program);
tyco.CollectTypes();
} catch(Exception ex)
{
fut.TextWriter.WriteLine(ex.Message);
fut.TextWriter.WriteLine(ex.StackTrace);
throw;
} finally
{
DumpProgAndStore(program, fut);
fut.Dispose();
}
}
示例5: RunTest
protected void RunTest(string sourceFile, string outputFile, Address addrBase)
{
Program program;
using (var rdr = new StreamReader(FileUnitTester.MapTestPath(sourceFile)))
{
program = asm.Assemble(addrBase, rdr);
}
foreach (var item in asm.ImportReferences)
{
program.ImportReferences.Add(item.Key, item.Value);
}
using (FileUnitTester fut = new FileUnitTester(outputFile))
{
Dumper dumper = new Dumper(program.Architecture);
dumper.ShowAddresses = true;
dumper.ShowCodeBytes = true;
dumper.DumpData(program.Image, program.Image.BaseAddress, program.Image.Length, fut.TextWriter);
fut.TextWriter.WriteLine();
dumper.DumpAssembler(program.Image, program.Image.BaseAddress, program.Image.BaseAddress + (uint)program.Image.Length, fut.TextWriter);
if (program.ImportReferences.Count > 0)
{
foreach (var de in program.ImportReferences.OrderBy(d => d.Key))
{
fut.TextWriter.WriteLine("{0:X8}: {1}", de.Key, de.Value);
}
}
fut.AssertFilesEqual();
}
}
示例6: RunTest
protected override void RunTest(Program program, string outputFile)
{
var eventListener = new FakeDecompilerEventListener();
using (FileUnitTester fut = new FileUnitTester(outputFile))
{
fut.TextWriter.WriteLine("// Before ///////");
DumpProgram(program, fut.TextWriter);
SetupPreStages(program);
aen.Transform(program);
eqb.Build(program);
var coll = new TypeCollector(program.TypeFactory, program.TypeStore, program,eventListener);
coll.CollectTypes();
program.TypeStore.BuildEquivalenceClassDataTypes(program.TypeFactory);
tvr.ReplaceTypeVariables();
trans.Transform();
ctn.RenameAllTypes(program.TypeStore);
ter = new TypedExpressionRewriter(program, eventListener);
try
{
ter.RewriteProgram(program);
}
catch (Exception ex)
{
fut.TextWriter.WriteLine("** Exception **");
fut.TextWriter.WriteLine(ex);
}
finally
{
fut.TextWriter.WriteLine("// After ///////");
DumpProgAndStore(program, fut);
}
}
}
示例7: VnLoop
//[Test]
public void VnLoop()
{
Program program = RewriteCodeFragment(@".i86
push ax
jmp looptest
again:
mov si,[0x302]
mov ax,[si+04]
add [si+06],ax
looptest:
cmp ax,bx
jl again
pop ax
ret
");
using (FileUnitTester fut = new FileUnitTester("Analysis/VnLoop.txt"))
{
Procedure proc = program.Procedures.Values[0];
var gr = proc.CreateBlockDominatorGraph();
Aliases alias = new Aliases(proc, program.Architecture);
alias.Transform();
SsaTransform sst = new SsaTransform(new ProgramDataFlow(), proc, gr);
SsaState ssa = sst.SsaState;
DumpProc(proc, ssa, fut.TextWriter);
ValueNumbering vn = new ValueNumbering(ssa.Identifiers);
vn.Write(fut.TextWriter);
fut.AssertFilesEqual();
}
}
示例8: SltSimple
public void SltSimple()
{
Build(new SimpleMock().Procedure, new FakeArchitecture());
using (FileUnitTester fut = new FileUnitTester("Analysis/SltSimple.txt"))
{
ssa.Write(fut.TextWriter);
sla.Write(proc, fut.TextWriter);
fut.TextWriter.WriteLine();
fut.AssertFilesEqual();
}
Block block = proc.EntryBlock.Succ[0];
block.Write(Console.Out);
Assert.AreEqual("Mem3[0x10000000:word32] = a + b", block.Statements[0].Instruction.ToString());
Assert.AreEqual("Mem4[0x10000004:word32] = a", block.Statements[1].Instruction.ToString());
SsaIdentifier a = ssa.Identifiers.Where(s=>s.Identifier.Name=="a").Single();
SsaIdentifier b = ssa.Identifiers.Where(s => s.Identifier.Name == "b").Single();
SsaIdentifier c_2 = ssa.Identifiers.Where(s => s.Identifier.Name == "c_2").Single();
Assert.IsFalse(sla.IsLiveOut(a.Identifier, block.Statements[1]), "a should be dead after its last use");
Assert.IsTrue(sla.IsLiveOut(a.Identifier, block.Statements[0]), "a should be live after the first use");
Assert.IsFalse(sla.IsDefinedAtStatement(c_2, block.Statements[0]));
Assert.IsFalse(sla.IsDefinedAtStatement(b, block.Statements[0]));
}
示例9: RunTest
protected override void RunTest(Program program, string outputFileName)
{
ExpressionNormalizer aen = new ExpressionNormalizer(program.Architecture.PointerType);
aen.Transform(program);
EquivalenceClassBuilder eq = new EquivalenceClassBuilder(factory, store);
eq.Build(program);
#if OLD
DataTypeBuilder dtb = new DataTypeBuilder(factory, store, program.Architecture);
TraitCollector coll = new TraitCollector(factory, store, dtb, program);
coll.CollectProgramTraits(program);
dtb.BuildEquivalenceClassDataTypes();
#else
TypeCollector coll = new TypeCollector(factory, store, program);
coll.CollectTypes();
store.BuildEquivalenceClassDataTypes(factory);
#endif
TypeVariableReplacer tvr = new TypeVariableReplacer(store);
tvr.ReplaceTypeVariables();
TypeTransformer trans = new TypeTransformer(factory, store, program);
trans.Transform();
using (FileUnitTester fut = new FileUnitTester(outputFileName))
{
foreach (Procedure proc in program.Procedures.Values)
{
proc.Write(false, fut.TextWriter);
fut.TextWriter.WriteLine();
}
store.Write(fut.TextWriter);
fut.AssertFilesEqual();
}
}
示例10: RenderResult
private void RenderResult(Program prog, string outputFile)
{
foreach (var item in asm.ImportReferences)
{
prog.ImportReferences.Add(item.Key, item.Value);
}
using (FileUnitTester fut = new FileUnitTester(outputFile))
{
Dumper dumper = new Dumper(prog.Architecture);
dumper.ShowAddresses = true;
dumper.ShowCodeBytes = true;
var mem = prog.SegmentMap.Segments.Values.First().MemoryArea;
var formatter = new TextFormatter(fut.TextWriter);
dumper.DumpData(prog.SegmentMap, mem.BaseAddress, mem.Bytes.Length, formatter);
fut.TextWriter.WriteLine();
dumper.DumpAssembler(prog.SegmentMap, mem.BaseAddress, mem.EndAddress, formatter);
if (prog.ImportReferences.Count > 0)
{
var list = new SortedList<Address, ImportReference>(prog.ImportReferences);
foreach (var de in list)
{
fut.TextWriter.WriteLine("{0}: {1}", de, de.Value);
}
}
fut.AssertFilesEqual();
}
}
示例11: RunTest
private void RunTest(ProcedureBuilder mock, string outputFile)
{
using (FileUnitTester fut = new FileUnitTester(outputFile))
{
mock.Procedure.Write(true, fut.TextWriter);
fut.AssertFilesEqual();
}
}
示例12: X86Rw_Switch
public void X86Rw_Switch()
{
DoRewriteFile("Fragments/switch.asm");
using (FileUnitTester fut = new FileUnitTester("Intel/RwSwitch.txt"))
{
prog.Procedures.Values[0].Write(false, fut.TextWriter);
}
}
示例13: Verify
private void Verify(string outputFileName)
{
using (FileUnitTester fut = new FileUnitTester(outputFileName))
{
store.Write(fut.TextWriter);
fut.AssertFilesEqual();
}
}
示例14: X86Rw_MemOperations
public void X86Rw_MemOperations()
{
DoRewriteFile("Fragments/memoperations.asm");
using (FileUnitTester fut = new FileUnitTester("Intel/RwMemOperations.txt"))
{
prog.Procedures.Values[0].Write(false, fut.TextWriter);
fut.AssertFilesEqual();
}
}
示例15: BitSetAllEnumerate
public void BitSetAllEnumerate()
{
using (FileUnitTester fut = new FileUnitTester("Core/BitSetAll.txt"))
{
BitSet a = new BitSet(8);
a.SetAll(true);
EnumerateBitsetBackwards(a, fut.TextWriter);
fut.AssertFilesEqual();
}
}