def tag_at(n)
      return if n < 0

      @tag_at_map ||= {}
      return @tag_at_map[n] if @tag_at_map[n]

      dyn = Structs::ELF_Dyn.new(endian: endian)
      dyn.elf_class = header.elf_class
      stream.pos = tag_start + n * dyn.num_bytes
      dyn.offset = stream.pos
      @tag_at_map[n] = Tag.new(dyn.read(stream), stream, method(:str_offset))
    end
def tag_at(n)
      return if n < 0

      @tag_at_map ||= {}
      return @tag_at_map[n] if @tag_at_map[n]

      dyn = Structs::ELF_Dyn.new(endian: endian)
      dyn.elf_class = header.elf_class
      stream.pos = tag_start + n * dyn.num_bytes
      dyn.offset = stream.pos
      @tag_at_map[n] = Tag.new(dyn.read(stream), stream, method(:str_offset))
    end
Get the +n+-th tag.

 Tags are lazy loaded.
 @note
   This method assume the following methods already exist:
     header
     tag_start
 @note
   We cannot do bound checking of +n+ here since the only way to get size
   of tags is calling +tags.size+.
 @param [Integer] n The index.
 @return [ELFTools::Dynamic::Tag] The desired tag.