Method: Rex::PeParsey::PeBase#_parse_tls_header

Defined in:
lib/rex/peparsey/pebase.rb

#_parse_tls_headerObject



963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
# File 'lib/rex/peparsey/pebase.rb', line 963

def _parse_tls_header

  #
  # Get the data directory entry, size, etc
  #
  exports_entry = _optional_header['DataDirectory'][IMAGE_DIRECTORY_ENTRY_TLS]
  rva           = exports_entry.v['VirtualAddress']
  size          = exports_entry.v['Size']

  return nil if size == 0

  #
  # Ok, so we have the data directory, now lets parse it
  #

  dirdata = _isource.read(rva_to_file_offset(rva), size)
  klass   = (ptr_64?) ? IMAGE_LOAD_TLS_DIRECTORY64 : IMAGE_LOAD_TLS_DIRECTORY32
  header  = klass.make_struct

  header.from_s(dirdata)

  @tls = TLSHeader.new(header)
end