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:



28
29
30
31
32
# File 'lib/one_gadget/fetchers.rb', line 28

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:



43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/one_gadget/fetchers.rb', line 43

def from_file(file, level: 0)
  arch = OneGadget::Helper.architecture(file)
  klass = {
    aarch64: OneGadget::Fetchers::AArch64,
    amd64: OneGadget::Fetchers::Amd64,
    arm: OneGadget::Fetchers::Arm,
    i386: OneGadget::Fetchers::I386
  }[arch]
  raise Error::UnsupportedArchitectureError, arch if klass.nil?

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