class TurboRex::MSRPC::MIDL::TypeFormatString::SimpleType

Constants

MAPPING

Public Instance Methods

decompile() click to toggle source
# File lib/turborex/msrpc/midl.rb, line 500
def decompile
  type_fc = @typefs_stream.read(1).unpack('C').first
  case type_fc
  when FC_ENUM16
    symbol_name = "DUMMY_ENUM16_#{SecureRandom.hex(2).upcase}".to_sym
    enum = DataType::Enum.new(symbol_name, :dummy_member)

    return DataType::TypeDefinition.new(symbol_name, enum, [symbol_name])
  when FC_ENUM32
    symbol_name = "DUMMY_ENUM32_#{SecureRandom.hex(2).upcase}".to_sym
    enum = DataType::Enum.new(symbol_name, :dummy_member)
    enum.attributes << :v1_enum
    return DataType::TypeDefinition.new(symbol_name, enum, [symbol_name], enum.attributes)
  else
    MAPPING.each do |m|
      if m[:value] == type_fc
        signed = true
        if m[:mapping].is_a?(Hash)
          symbol_name = m[:mapping][:type]
          signed = m[:mapping][:signed]
        else
          symbol_name = m[:mapping]
        end
        return DataType::BaseType.new(symbol_name, signed)
      end
    end
  end

  raise TurboRex::Exception::MSRPC::InvalidTypeFormatString
end