Class: SeccompTools::Emulator
- Inherits:
-
Object
- Object
- SeccompTools::Emulator
- Defined in:
- lib/seccomp-tools/emulator.rb
Overview
For emulating seccomp.
Instance Method Summary collapse
-
#initialize(instructions, sys_nr: nil, args: [], instruction_pointer: nil, arch: nil) ⇒ Emulator
constructor
Instantiate a Emulator object.
-
#run ⇒ {Symbol, Integer => Integer}
Run emulation!.
Constructor Details
#initialize(instructions, sys_nr: nil, args: [], instruction_pointer: nil, arch: nil) ⇒ Emulator
Instantiate a SeccompTools::Emulator object.
All parameters except instructions are optional. A warning is shown when uninitialized data is accessed.
22 23 24 25 26 27 28 |
# File 'lib/seccomp-tools/emulator.rb', line 22 def initialize(instructions, sys_nr: nil, args: [], instruction_pointer: nil, arch: nil) @instructions = instructions @sys_nr = sys_nr @args = args @ip = instruction_pointer @arch = audit(arch || Util.system_arch) end |
Instance Method Details
#run ⇒ {Symbol, Integer => Integer}
Run emulation!
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/seccomp-tools/emulator.rb', line 32 def run @values = { pc: 0, a: 0, x: 0 } loop do break if @values[:ret] # break when returned yield(@values) if block_given? inst = @instructions[pc] op, *args = inst.symbolize case op when :ret then ret(args.first) # ret when :ld then ld(args[0], args[1]) # ld/ldx when :st then st(args[0], args[1]) # st/stx when :jmp then jmp(args[0]) # directly jmp when :cmp then cmp(*args[0, 4]) # jmp with comparison when :alu then alu(args[0], args[1]) # alu when :misc then misc(args[0]) # misc: txa/tax end set(:pc, get(:pc) + 1) if %i[ld st alu misc].include?(op) end @values end |