Class: OneGadget::Emulators::I386
- Defined in:
- lib/one_gadget/emulators/i386.rb
Overview
Emulator of amd64 instruction set.
Constant Summary
Constants inherited from X86
X86::COMPARES, X86::JCC, X86::SEGMENT_OPERAND
Constants inherited from Processor
Processor::ADDRESS_TYPES, Processor::CLOBBERED, Processor::NULLABLE_REQUIREMENTS, Processor::POINTER_REQUIREMENTS, Processor::TERMINAL_CALL_RE
Constants included from Conditional
Conditional::COMPARE_OPS, Conditional::NEGATE, Conditional::RELATION
Instance Attribute Summary
Attributes inherited from Processor
#bp, #pc, #refused_line, #registers, #sp
Class Method Summary collapse
-
.bits ⇒ Object
Yap, bits.
Instance Method Summary collapse
-
#argument(idx) ⇒ Lambda, Integer
Get function call arguments.
-
#initialize ⇒ I386
constructor
Instantiate an I386 object.
Methods inherited from X86
Methods inherited from Processor
#address_deref0?, #bp_based_stack, #closed_fds, #constraint_key, #constraints, #drop_implied_nonzero, #drop_restated_null, #get_corresponding_stack, instruction_table, #instructions, line_memo, #parse, #process, #process!, #reach_terminal_call, #render_constraint, #resolve_address, #setup_frame_pointer, #sp_based_stack, #terminal_call?
Methods included from Conditional
#branch_on_bit, #branch_on_compare, #branch_on_zero, #comparisons_on, #handle_compare, #mnemonic, #operand_str, #record_compare, #resolve_pending_branch, #satisfiable?, #value_str
Constructor Details
#initialize ⇒ I386
Instantiate an OneGadget::Emulators::I386 object.
18 19 20 |
# File 'lib/one_gadget/emulators/i386.rb', line 18 def initialize super(OneGadget::ABI.i386, 'esp', 'ebp', 'eip') end |
Class Method Details
.bits ⇒ Object
Yap, bits.
12 13 14 |
# File 'lib/one_gadget/emulators/i386.rb', line 12 def bits 32 end |
Instance Method Details
#argument(idx) ⇒ Lambda, Integer
Get function call arguments.
For i386 this is a little bit tricky. We need to fetch the stack slots reference to current 'esp' but not original 'esp'. So we need to evaluate the offset of current esp first.
30 31 32 33 |
# File 'lib/one_gadget/emulators/i386.rb', line 30 def argument(idx) cur_top = registers['esp'].evaluate('esp' => 0) sp_based_stack[cur_top + idx * 4] end |