public void SymUndefinedSymbols() { SymbolTable symtab = new SymbolTable(); Symbol foo = symtab.CreateSymbol("foo"); Symbol bar = symtab.CreateSymbol("bar"); Symbol fred = symtab.DefineSymbol("fred", 0x10); Symbol [] undef = symtab.GetUndefinedSymbols(); Assert.AreEqual(2, undef.Length); Assert.AreSame(bar, undef[0]); Assert.AreSame(foo, undef[1]); }
public void SymResolveReference() { SymbolTable symtab = new SymbolTable(); Symbol sym = symtab.CreateSymbol("foo"); Symbol sym2 = symtab.DefineSymbol("foo", 3); StringWriter writer = new StringWriter(); symtab.Write(writer); Assert.AreEqual( @"foo: resolved 00000003 patches: 0 (foo) ", writer.ToString()); }
private Dictionary<Symbol, AssembledSegment> symbolSegments; // The segment to which a symbol belongs. public X86Assembler(IServiceProvider services, IPlatform platform, Address addrBase, List<EntryPoint> entryPoints) { this.services = services; this.arch = platform.Architecture; this.addrBase = addrBase; this.entryPoints = entryPoints; this.defaultWordSize = arch.WordWidth; this.textEncoding = Encoding.GetEncoding("ISO_8859-1"); symtab = new SymbolTable(); importReferences = new Dictionary<Address, ImportReference>(); segments = new List<AssembledSegment>(); mpNameToSegment = new Dictionary<string, AssembledSegment>(); symbolSegments = new Dictionary<Symbol, AssembledSegment>(); this.SegmentOverride = RegisterStorage.None; unknownSegment = new AssembledSegment(new Emitter(), symtab.DefineSymbol("", 0)); segments.Add(unknownSegment); SwitchSegment(unknownSegment); SetDefaultWordWidth(defaultWordSize); }