What Architectures and Instruction Sets are Supported?
ARM32#
Relyze Desktop supports analyzing, disassembling and assembling 32 bit ARM, including Thumb and Thumb2 modes.
ARM64#
Relyze Desktop supports analyzing, disassembling and assembling 64 bit ARM (Refered to as either arm64 or Aarch64).
x86 and x64#
Relyze Desktop supports analyzing, disassembling and assembling both x86 and x64 code.
The following instruction set extensions are fully supported:
MMX, FPU (x87), 3DNow, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, SSE4a, FMA, FMA4, F16C, AES, AMD-V, INTEL-VMX, SMX, ADX, AVX, AVX2, XOP, BMI, BMI2, FSGSBASE, ABM/LZCNT, SHA, CLMUL, SGX, RDSEED, SMAP, INVPCID, RTM, XSAVE/XRSTOR, HLE, MPX and TBM.
Plugin Support#
Using the plugin framework, you can access an instruction’s raw decoding as shown in the simple examples below:
# Simple example to color an instruction based on its EFLAGS access.
def run
result = cm.synchronize_write do
# Pull out the RVA of the function the user has selected in the GUI
func_rva = @relyze.tab_current_function_rva( cm ) || (break 'No function selected')
# Pull out the corresponding function object
func = cm.function( func_rva ) || (break 'Function not found')
# Iterate over every block in the function
func.blocks do | block |
# Iterate over every instruction in the block
block.instructions do | inst |
# Pull out the instruction raw decoding
raw = inst.to_raw
# Color instruction that modify the ZF flag green
# and color instruction that test the ZF flag blue.
if( raw[:flags][:zf] == :modified )
inst.color = @relyze.rgb( 0, 128, 0 )
elsif( raw[:flags][:zf] == :tested )
inst.color = @relyze.rgb( 0, 0, 128 )
else
inst.color = nil
end
end
end
'Finished'
end
print_message( result )
@relyze.update_gui
end
# Simple example to color every instruction in a function that writes to memory.
def run
result = cm.synchronize_write do
# Pull out the RVA of the function the user has selected in the GUI
func_rva = @relyze.tab_current_function_rva( cm ) || (break 'No function selected')
# Pull out the corresponding function object
func = cm.function( func_rva ) || (break 'Function not found')
# Iterate over every block in the function
func.blocks do | block |
# Iterate over every instruction in the block
block.instructions do | inst |
# Pull out the instruction raw decoding
raw = inst.to_raw
# Clear the instructions existing color
inst.color = nil
# Iterate over each operand looking for a memory write
raw[:operands].each do | operand |
if( operand[:write] and operand[:type] == :memory )
inst.color = @relyze.rgb( 96, 255, 255 )
break
end
end
end
end
'Finished'
end
print_message( result )
@relyze.update_gui
end