class Ronin::ASM::Syntax::Intel
Constants
- WIDTHS
Data sizes and their identifiers
Public Class Methods
emit_immediate_operand(op)
click to toggle source
Emits an immediate operand.
@param [ImmediateOperand] op
The operand.
@return [String]
The formatted immediate operand.
# File lib/ronin/asm/syntax/intel.rb, line 59 def self.emit_immediate_operand(op) "#{WIDTHS[op.width]} #{emit_integer(op.value)}" end
emit_instruction(ins)
click to toggle source
Emits an instruction.
@param [Instruction] ins
The instruction.
@return [String]
The formatted instruction.
# File lib/ronin/asm/syntax/intel.rb, line 106 def self.emit_instruction(ins) line = emit_keyword(ins.name) unless ins.operands.empty? line << "\t" << emit_operands(ins.operands) end return line end
emit_memory_operand(op)
click to toggle source
Emits a memory operand.
@param [MemoryOperand] op
The operand.
@return [String]
The formatted memory operand.
# File lib/ronin/asm/syntax/intel.rb, line 72 def self.emit_memory_operand(op) asm = emit_register(op.base) if op.index asm << '+' << emit_register(op.index) asm << '*' << emit_integer(op.scale) if op.scale > 1 end if op.offset != 0 sign = if op.offset >= 0 then '+' else '-' end asm << sign << emit_integer(op.offset) end asm = "[#{asm}]" unless op.width == op.base.width asm = "#{WIDTHS[op.width]} #{asm}" end return asm end
emit_prologue(program)
click to toggle source
Emits the program’s prologue.
@param [Program] program
The program.
@return [String]
The formatted prologue.
@since 0.2.0
# File lib/ronin/asm/syntax/intel.rb, line 142 def self.emit_prologue(program) "BITS #{BITS[program.arch]}" end
emit_register(reg)
click to toggle source
Emits a register.
@param [Register] reg
The register.
@return [String]
The register name.
# File lib/ronin/asm/syntax/intel.rb, line 46 def self.emit_register(reg) reg.name.to_s end
emit_section(name)
click to toggle source
Emits a section name.
@param [Symbol] name
The section name.
@return [String]
The formatted section name.
@since 0.2.0
# File lib/ronin/asm/syntax/intel.rb, line 127 def self.emit_section(name) "section .#{name}" end