Class: Ronin::Payloads::RustPayload

Inherits:
BinaryPayload show all
Defined in:
lib/ronin/payloads/rust_payload.rb

Overview

A Payload class that represents all Rust payloads.

Instance Attribute Summary

Attributes inherited from Payload

#encoders, #payload

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Payload

#build, #built?, #built_payload, #bytesize, #cleanup, #encode_payload, #encoded_payload, encoder_class, #initialize, #length, #perform_build, #perform_cleanup, #perform_postlaunch, #perform_prelaunch, #perform_validate, #postlaunch, #prelaunch, #rebuild_payload, #reencode_payload, register, #to_s, #validate

Constructor Details

This class inherits a constructor from Ronin::Payloads::Payload

Class Method Details

.payload_typeSymbol

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Note:

This is used internally to map an payload class to a printable type.

Returns the type or kind of payload.

Returns:

  • (Symbol)


41
42
43
# File 'lib/ronin/payloads/rust_payload.rb', line 41

def self.payload_type
  :rust
end

Instance Method Details

#compile(*source_files, output: nil, target: nil, cfg: nil) ⇒ Object

Compiles one or more source files using the go build command.

Parameters:

  • source_files (Array<String>)

    The source file(s) to compile.

  • output (String, nil) (defaults to: nil)

    The output file path.

  • target (String, nil) (defaults to: nil)

    Target triple to compile for.

  • cfg (Hash, Array, nil) (defaults to: nil)

    Additional configuration flags to pass to rustc.

Raises:

  • (ArgumentError)

    The cfg value was not a Hash or an Array.

  • (BuildFailed)

    The rustc command failed or is not installed.



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
91
92
93
94
95
96
97
98
99
100
# File 'lib/ronin/payloads/rust_payload.rb', line 66

def compile(*source_files, output: nil, target: nil, cfg: nil)
  args = ['rustc']

  if output
    args << '-o' << output
  end

  if target
    args << '--target' << target
  end

  if cfg
    case cfg
    when Hash
      cfg.each do |key,value|
        args << '--cfg' << "#{key}=\"#{value}\""
      end
    when Array
      cfg.each do |value|
        args << '--cfg' << value.to_s
      end
    else
      raise(ArgumentError,"cfg value must be either a Hash or an Array: #{cfg.inspect}")
    end
  end

  args.concat(source_files)

  case system(*args)
  when false
    raise(BuildFailed,"rustc command failed: #{args.join(' ')}")
  when nil
    raise(BuildFailed,"rustc command not installed")
  end
end