Module: RubySMB::Dcerpc::Ndr::TopLevelPlugin

Defined in:
lib/ruby_smb/dcerpc/ndr.rb

Defined Under Namespace

Modules: TopLevelClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(target) ⇒ Object



876
877
878
879
# File 'lib/ruby_smb/dcerpc/ndr.rb', line 876

def self.extended(target)
  target.class.extend(TopLevelClassMethods)
  target.class.reset_pos
end

Instance Method Details

#do_write(io, is_deferred: false) ⇒ Object



886
887
888
889
890
891
892
893
894
895
896
897
898
# File 'lib/ruby_smb/dcerpc/ndr.rb', line 886

def do_write(io, is_deferred: false)
  # If for whatever reasons, the #pos value has been modified, reset it to
  # make sure the pointer ref_id will start from INITIAL_REF_ID
  self.class.reset_pos if is_top_level_ptr || @standalone_ptr
  if is_deferred
    super(io, is_deferred: is_deferred)
  else
    super(io)
  end
  # Since #pos has been incremented for each embedded pointer, let's reset
  # it to go back to its initial state
  self.class.reset_pos if is_top_level_ptr || @standalone_ptr
end

#initialize_instanceObject



881
882
883
884
# File 'lib/ruby_smb/dcerpc/ndr.rb', line 881

def initialize_instance
  super
  @standalone_ptr = false
end

#is_top_level_ptrObject



916
917
918
# File 'lib/ruby_smb/dcerpc/ndr.rb', line 916

def is_top_level_ptr
  !!@top_level_ptr
end

#num_bytesObject



920
921
922
923
924
925
# File 'lib/ruby_smb/dcerpc/ndr.rb', line 920

def num_bytes
  @standalone_ptr = true
  res = super
  @standalone_ptr = false
  res
end

#set_top_level_ptrObject



907
908
909
910
# File 'lib/ruby_smb/dcerpc/ndr.rb', line 907

def set_top_level_ptr
  @top_level_ptr = true
  #update_ref_ids
end

#to_binary_sObject



900
901
902
903
904
905
# File 'lib/ruby_smb/dcerpc/ndr.rb', line 900

def to_binary_s
  @standalone_ptr = true
  res = super
  @standalone_ptr = false
  res
end

#unset_top_level_ptrObject



912
913
914
# File 'lib/ruby_smb/dcerpc/ndr.rb', line 912

def unset_top_level_ptr
  @top_level_ptr = false
end