code: def read(self, size = -1):
  		
  		if size < -1:
  			raise Exception('You shouldnt be doing this')
  		if size == -1:
  			t = self.current_segment.remaining_len(self.current_position)
  			if not t:
  				return None
  			
  			old_new_pos = self.current_position
  			self.current_position = self.current_segment.end_address
  			return self.current_segment.data[old_new_pos - self.current_segment.start_address:]
  		
  		t = self.current_position + size
  		if not self.current_segment.inrange(t):
  			raise Exception('Would read over segment boundaries!')
  		
  		old_new_pos = self.current_position
  		self.current_position = t		
  		return self.current_segment.data[old_new_pos - self.current_segment.start_address :t - self.current_segment.start_address]
docs: Returns data bytes of size size from the current segment. If size is -1 it returns all the remaining data bytes from memory segment