Esempio n. 1
0
        void read_bfd_symbols()
        {
            IntPtr symtab;
            int    num_symbols = bfd_glue_get_symbols(bfd, out symtab);

            symbols        = new Hashtable();
            local_symbols  = new Hashtable();
            simple_symbols = new ArrayList();

            bool is_mach = (bfd_glue_get_target_name(bfd) == "mach-o-le");

            for (int i = 0; i < num_symbols; i++)
            {
                string name;
                long   address;
                int    is_function;

                name = bfd_glue_get_symbol(bfd, symtab, i, out is_function, out address);
                if (name == null)
                {
                    continue;
                }

                if (is_mach)
                {
                    if (name[0] == '_')
                    {
                        name = name.Substring(1);
                    }
                }

                TargetAddress relocated = new TargetAddress(
                    info.AddressDomain, base_address.Address + address);
                if (is_function != 0 && !symbols.Contains(name))
                {
                    symbols.Add(name, relocated);
                }
                else if (name.StartsWith("MONO_DEBUGGER__") && !symbols.Contains(name))
                {
                    symbols.Add(name, relocated);
                }
                else if (!local_symbols.Contains(name))
                {
                    local_symbols.Add(name, relocated);
                }

                simple_symbols.Add(new Symbol(name, relocated, 0));
            }

            g_free(symtab);

            num_symbols = bfd_glue_get_dynamic_symbols(bfd, out symtab);

            for (int i = 0; i < num_symbols; i++)
            {
                string name;
                long   address;
                int    is_function;

                name = bfd_glue_get_symbol(bfd, symtab, i, out is_function, out address);
                if (name == null)
                {
                    continue;
                }

                TargetAddress relocated = new TargetAddress(
                    info.AddressDomain,
                    base_address.Address + address);
                simple_symbols.Add(new Symbol(name, relocated, 0));
            }

            g_free(symtab);

            simple_symtab = new BfdSymbolTable(this);
        }
Esempio n. 2
0
        void read_bfd_symbols()
        {
            IntPtr symtab;
            int num_symbols = bfd_glue_get_symbols (bfd, out symtab);

            symbols = new Hashtable ();
            local_symbols = new Hashtable ();
            simple_symbols = new ArrayList ();

            bool is_mach = (bfd_glue_get_target_name (bfd) == "mach-o-le");

            for (int i = 0; i < num_symbols; i++) {
                string name;
                long address;
                int is_function;

                name = bfd_glue_get_symbol (bfd, symtab, i, out is_function, out address);
                if (name == null)
                    continue;

                if(is_mach) {
                    if(name[0] == '_')
                        name = name.Substring(1);
                }

                TargetAddress relocated = new TargetAddress (
                    info.AddressDomain, base_address.Address + address);
                if (is_function != 0 && !symbols.Contains (name))
                    symbols.Add (name, relocated);
                else if (name.StartsWith ("MONO_DEBUGGER__") && !symbols.Contains (name))
                    symbols.Add (name, relocated);
                else if (!local_symbols.Contains (name))
                    local_symbols.Add (name, relocated);

                simple_symbols.Add (new Symbol (name, relocated, 0));
            }

            g_free (symtab);

            num_symbols = bfd_glue_get_dynamic_symbols (bfd, out symtab);

            for (int i = 0; i < num_symbols; i++) {
                string name;
                long address;
                int is_function;

                name = bfd_glue_get_symbol (bfd, symtab, i, out is_function, out address);
                if (name == null)
                    continue;

                TargetAddress relocated = new TargetAddress (
                    info.AddressDomain,
                    base_address.Address + address);
                simple_symbols.Add (new Symbol (name, relocated, 0));
            }

            g_free (symtab);

            simple_symtab = new BfdSymbolTable (this);
        }