Module: RubySMB::Dcerpc::Ndr::VarStringPlugin

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#actual_countObject

Returns the value of attribute actual_count.



580
581
582
# File 'lib/ruby_smb/dcerpc/ndr.rb', line 580

def actual_count
  @actual_count
end

#offsetObject

Returns the value of attribute offset.



580
581
582
# File 'lib/ruby_smb/dcerpc/ndr.rb', line 580

def offset
  @offset
end

Instance Method Details

#assign(val) ⇒ Object



609
610
611
612
# File 'lib/ruby_smb/dcerpc/ndr.rb', line 609

def assign(val)
  update_actual_count(val)
  super
end

#do_num_bytesObject



614
615
616
# File 'lib/ruby_smb/dcerpc/ndr.rb', line 614

def do_num_bytes
  @actual_count > 0 ? (8 + super) : 8
end

#do_read(io) ⇒ Object



597
598
599
600
601
602
603
604
605
606
607
# File 'lib/ruby_smb/dcerpc/ndr.rb', line 597

def do_read(io)
  @offset = io.readbytes(4).unpack('L<').first
   BinData.trace_message do |tracer|
    tracer.trace_obj("#{debug_name}.offset", @offset.to_s)
  end
  @actual_count = io.readbytes(4).unpack('L<').first
  BinData.trace_message do |tracer|
    tracer.trace_obj("#{debug_name}.actual_count", @actual_count.to_s)
  end
  super if @actual_count > 0
end

#do_write(io) ⇒ Object



591
592
593
594
595
# File 'lib/ruby_smb/dcerpc/ndr.rb', line 591

def do_write(io)
  io.writebytes([@offset].pack('L<'))
  io.writebytes([@actual_count].pack('L<'))
  super if @actual_count > 0
end

#initialize_instanceObject



582
583
584
585
586
587
588
589
# File 'lib/ruby_smb/dcerpc/ndr.rb', line 582

def initialize_instance
  @offset = 0
  @actual_count = 0
  if has_parameter?(:initial_value)
    update_actual_count(eval_parameter(:initial_value))
  end
  super
end

#update_actual_count(val) ⇒ Object



618
619
620
621
622
623
624
625
626
# File 'lib/ruby_smb/dcerpc/ndr.rb', line 618

def update_actual_count(val)
  if is_a?(BinData::Stringz)
    @actual_count = val.to_s.strip.length
    # Only count the terminating NULL byte if the string is not empty
    @actual_count += 1 if @actual_count > 0
  else
    @actual_count = val.to_s.length
  end
end