Module: OneGadget
- Defined in:
- lib/one_gadget.rb,
lib/one_gadget/abi.rb,
lib/one_gadget/cli.rb,
lib/one_gadget/error.rb,
lib/one_gadget/gadget.rb,
lib/one_gadget/helper.rb,
lib/one_gadget/logger.rb,
lib/one_gadget/update.rb,
lib/one_gadget/version.rb,
lib/one_gadget/fetchers.rb,
lib/one_gadget/one_gadget.rb,
lib/one_gadget/fetchers/arm.rb,
lib/one_gadget/fetchers/x86.rb,
lib/one_gadget/emulators/arm.rb,
lib/one_gadget/emulators/x86.rb,
lib/one_gadget/fetchers/base.rb,
lib/one_gadget/fetchers/i386.rb,
lib/one_gadget/emulators/i386.rb,
lib/one_gadget/fetchers/amd64.rb,
lib/one_gadget/emulators/amd64.rb,
lib/one_gadget/emulators/lambda.rb,
lib/one_gadget/fetchers/aarch64.rb,
lib/one_gadget/fetchers/objdump.rb,
lib/one_gadget/emulators/aarch64.rb,
lib/one_gadget/emulators/processor.rb,
lib/one_gadget/emulators/arm_family.rb,
lib/one_gadget/emulators/safe_calls.rb,
lib/one_gadget/emulators/conditional.rb,
lib/one_gadget/emulators/instruction.rb,
lib/one_gadget/emulators/register_file.rb
Overview
Main module.
Defined Under Namespace
Modules: ABI, CLI, Emulators, Error, Fetchers, Gadget, Helper, Logger, Update
Constant Summary collapse
- VERSION =
Current gem version.
'2.0.0'
Class Method Summary collapse
-
.gadgets(file: nil, build_id: nil, details: false, force_file: false, level: 0) ⇒ Array<OneGadget::Gadget::Gadget>, Array<Integer>
The man entry of gem
one_gadget.
Class Method Details
.gadgets(file: nil, build_id: nil, details: false, force_file: false, level: 0) ⇒ Array<OneGadget::Gadget::Gadget>, Array<Integer>
The man entry of gem one_gadget.
If want to find gadgets from file, it will search gadgets by its
build id first.
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/one_gadget/one_gadget.rb', line 35 def gadgets(file: nil, build_id: nil, details: false, force_file: false, level: 0) ret = if build_id OneGadget::Fetchers.from_build_id(build_id, level:) || OneGadget::Logger.not_found(build_id) else # level >= RAW_LEVEL wants every gadget, but the build-id database # only stores the trimmed set, so emulate the file instead of it. force = force_file || level >= OneGadget::Fetchers::RAW_LEVEL from_file(OneGadget::Helper.abspath(file), force:, level:) end ret = refine_gadgets(ret, level) # An offset can recur at level >= 2 (one entry point, several branch-reach # constraint sets); the offset-only view lists it once. A no-op at lower # levels, where offsets are already unique. ret = ret.map(&:offset).uniq unless details ret rescue OneGadget::Error::Error => e OneGadget::Logger.error("#{e.class.name.split('::').last}: #{e.}") [] end |