Method: Rex::Java::Serialization::Builder#new_class

Defined in:
lib/rex/java/serialization/builder.rb

#new_class(opts = {}) ⇒ Rex::Java::Serialization::Model::NewClassDesc

Creates a Rex::Java::Serialization::Model::NewClassDesc

Parameters:

Options Hash (opts):

Returns:



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/rex/java/serialization/builder.rb', line 61

def new_class(opts = {})
  class_name = opts[:name] || ''
  serial_version = opts[:serial] || 0
  flags = opts[:flags] || 2
  fields = opts[:fields] || []
  annotations = opts[:annotations] || [Rex::Java::Serialization::Model::NullReference.new,
                                       Rex::Java::Serialization::Model::EndBlockData.new]
  super_class = opts[:super_class] || Rex::Java::Serialization::Model::NullReference.new

  class_desc = Rex::Java::Serialization::Model::NewClassDesc.new
  class_desc.class_name = Rex::Java::Serialization::Model::Utf.new(nil, class_name)
  class_desc.serial_version = serial_version
  class_desc.flags = flags
  class_desc.fields = []

  fields.each do |f|
    field = Rex::Java::Serialization::Model::Field.new
    field.type = f[0]
    field.name = Rex::Java::Serialization::Model::Utf.new(nil, f[1])
    field.field_type = Rex::Java::Serialization::Model::Utf.new(nil, f[2]) if f[2]
    class_desc.fields << field
  end

  class_desc.class_annotation = Rex::Java::Serialization::Model::Annotation.new
  class_desc.class_annotation.contents = annotations
  class_desc.super_class = Rex::Java::Serialization::Model::ClassDesc.new
  class_desc.super_class.description = super_class

  class_desc
end