示例#1
0
 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]);
 }
示例#2
0
 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());
 }
示例#3
0
        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);
        }