private ElfSymbol GetSymbol64(IVirtualMemoryManager memory, ulong address, ulong strTblAddr) { ElfSymbol64 sym = memory.Read <ElfSymbol64>(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 GetSymbol64(MemoryManager memory, long address, long strTblAddr) { using (BinaryReader inputStream = new BinaryReader(new MemoryStream(memory.ReadBytes(address, Unsafe.SizeOf <ElfSymbol64>())))) { ElfSymbol64 sym = inputStream.ReadStruct <ElfSymbol64>(); 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)); } }
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)); } }