class Elf::GNU::SymbolVersionDef

Constants

FlagBase
FlagWeak

Public Instance Methods

[](idx) click to toggle source
# File lib/elf/gnu.rb, line 99
def [](idx)
  load unless @defined_versions

  @defined_versions[idx]
end
count() click to toggle source
# File lib/elf/gnu.rb, line 93
def count
  load unless @defined_versions

  @defined_versions.size
end
each_version(&block) click to toggle source

Allow to iterate over all the versions defined in the ELF file.

# File lib/elf/gnu.rb, line 107
def each_version(&block)
  load unless @defined_versions

  @defined_versions.each_value(&block)
end
load_internal() click to toggle source
# File lib/elf/gnu.rb, line 58
def load_internal
  link.load # do this now for safety

  @defined_versions = {}
  entry_off = @offset
  loop do
    @file.seek(entry_off)

    entry = {}
    version = @file.read_half
    raise SymbolVersionUnknown.new(version) if version != 1
    entry[:flags] = @file.read_half
    ndx = @file.read_half
    aux_count = @file.read_half
    entry[:hash] = @file.read_word
    name_off = entry_off + @file.read_word
    next_entry_off = @file.read_word

    entry[:names] = []
    for i in 1..aux_count
      @file.seek(name_off)
      entry[:names] << link[@file.read_word]
      next_name_off = @file.read_word
      break unless next_name_off != 0
      name_off += next_name_off
    end

    @defined_versions[ndx] = entry

    break unless next_entry_off != 0

    entry_off += next_entry_off
  end
end