Module: OneGadget::Fetchers::ClassMethods

Included in:
OneGadget::Fetchers
Defined in:
lib/one_gadget/fetchers.rb

Overview

Define class methods here.

Instance Method Summary collapse

Instance Method Details

#from_build_id(build_id, remote: true, level: 0) ⇒ Array<OneGadget::Gadget::Gadget>?

Fetch one-gadget offsets of this build id.

Parameters:

  • build_id (String)

    The targets' BuildID.

  • remote (Boolean) (defaults to: true)

    When local not found, try search in latest version?

  • level (Integer) (defaults to: 0)

    Output level, interpreted as in #from_file.

Returns:



41
42
43
44
45
# File 'lib/one_gadget/fetchers.rb', line 41

def from_build_id(build_id, remote: true, level: 0)
  OneGadget::Helper.verify_build_id!(build_id)
  gadgets = OneGadget::Gadget.builds(build_id, remote:)
  gadgets && for_level(gadgets, level)
end

#from_file(file, level: 0) ⇒ Array<OneGadget::Gadget::Gadget>

Fetch one-gadget offsets from file.

Parameters:

  • file (String)

    The absolute path of libc file.

  • level (Integer) (defaults to: 0)

    Output level. Below RAW_LEVEL the result is trimmed to the easiest-to-reach gadgets (#trim_gadgets); at RAW_LEVEL and above every distinct gadget is kept (#all_gadgets), including ones a lower level drops as duplicate or harder-to-satisfy.

Returns:

Raises:



56
57
58
59
60
61
62
# File 'lib/one_gadget/fetchers.rb', line 56

def from_file(file, level: 0)
  arch = OneGadget::Helper.architecture(file)
  klass = FETCHERS[arch]
  raise Error::UnsupportedArchitectureError, arch if klass.nil?

  for_level(klass.new(file).find, level)
end

#supported_architecture?(arch) ⇒ Boolean

Whether gadgets can be searched for in arch. The ELF reader recognises plenty this tool cannot emulate.

Parameters:

Returns:

  • (Boolean)


68
69
70
# File 'lib/one_gadget/fetchers.rb', line 68

def supported_architecture?(arch)
  FETCHERS.key?(arch)
end