예제 #1
0
        private ElfSymbol GetSymbol32(IVirtualMemoryManager memory, ulong address, ulong strTblAddr)
        {
            ElfSymbol32 sym = memory.Read <ElfSymbol32>(address);

            uint nameIndex = sym.NameOffset;

            string name = string.Empty;

            for (int chr; (chr = memory.Read <byte>(strTblAddr + nameIndex++)) != 0;)
            {
                name += (char)chr;
            }

            return(new ElfSymbol(name, sym.Info, sym.Other, sym.SectionIndex, sym.ValueAddress, sym.Size));
        }
        private ElfSymbol GetSymbol32(MemoryManager memory, long address, long strTblAddr)
        {
            using (BinaryReader inputStream = new BinaryReader(new MemoryStream(memory.ReadBytes(address, Unsafe.SizeOf <ElfSymbol32>()))))
            {
                ElfSymbol32 sym = inputStream.ReadStruct <ElfSymbol32>();

                uint nameIndex = sym.NameOffset;

                string name = string.Empty;

                for (int chr; (chr = memory.ReadByte(strTblAddr + nameIndex++)) != 0;)
                {
                    name += (char)chr;
                }

                return(new ElfSymbol(name, sym.Info, sym.Other, sym.SectionIndex, sym.ValueAddress, sym.Size));
            }
        }
예제 #3
0
 public ElfSymbol GetSymbol(int index)
 {
     if (_is64Bit)
     {
         ElfSymbol64   s    = _reader.Read <ElfSymbol64>(_address + index * _symSize);
         string        name = _stringTable.GetStringAtIndex((int)s.Name);
         ElfSymbolBind b    = (ElfSymbolBind)(s.Info >> 4);
         ElfSymbolType t    = (ElfSymbolType)(s.Info & 0xF);
         return(new ElfSymbol(name, b, t, s.Value, (long)s.Size));
     }
     else
     {
         ElfSymbol32   s    = _reader.Read <ElfSymbol32>(_address + index * _symSize);
         string        name = _stringTable.GetStringAtIndex((int)s.Name);
         ElfSymbolBind b    = (ElfSymbolBind)(s.Info >> 4);
         ElfSymbolType t    = (ElfSymbolType)(s.Info & 0xF);
         return(new ElfSymbol(name, b, t, (long)s.Value, s.Size));
     }
 }