# This file is part of Metasm, the Ruby assembly manipulation suite # Copyright (C) 2006-2009 Yoann GUILLOT # # Licence is LGPL, see LICENCE in the top-level directory module Metasm # root directory for metasm files # used by some scripts, eg to find samples/dasm-plugin directory Metasmdir = File.dirname(__FILE__) # add it to the ruby library path $: << Metasmdir # constants defined in the same file as another Const_autorequire_equiv = { 'X86' => 'Ia32', 'PPC' => 'PowerPC', 'X64' => 'X86_64', 'AMD64' => 'X86_64', 'MIPS64' => 'MIPS', 'UniversalBinary' => 'MachO', 'COFFArchive' => 'COFF', 'DEY' => 'DEX', 'PTrace' => 'LinOS', 'FatELF' => 'ELF', 'LoadedELF' => 'ELF', 'LoadedPE' => 'PE', 'LoadedAutoExe' => 'AutoExe', 'LinuxRemoteString' => 'LinOS', 'LinDebugger' => 'LinOS', 'WinAPI' => 'WinOS', 'WindowsRemoteString' => 'WinOS', 'WinDbgAPI' => 'WinOS', 'WinDebugger' => 'WinOS', 'GdbRemoteString' => 'GdbClient', 'GdbRemoteDebugger' => 'GdbClient', 'DecodedInstruction' => 'Disassembler', 'DecodedFunction' => 'Disassembler', 'InstructionBlock' => 'Disassembler', } # files to require to get the definition of those constants Const_autorequire = { 'Ia32' => 'cpu/ia32', 'MIPS' => 'cpu/mips', 'PowerPC' => 'cpu/ppc', 'ARM' => 'cpu/arm', 'X86_64' => 'cpu/x86_64', 'Sh4' => 'cpu/sh4', 'Dalvik' => 'cpu/dalvik', 'ARC' => 'cpu/arc', 'Python' => 'cpu/python', 'Z80' => 'cpu/z80', 'CY16' => 'cpu/cy16', 'BPF' => 'cpu/bpf', 'MSP430' => 'cpu/msp430', 'C' => 'compile_c', 'MZ' => 'exe_format/mz', 'PE' => 'exe_format/pe', 'ELF' => 'exe_format/elf', 'COFF' => 'exe_format/coff', 'Shellcode' => 'exe_format/shellcode', 'AutoExe' => 'exe_format/autoexe', 'AOut' => 'exe_format/a_out', 'MachO' => 'exe_format/macho', 'DEX' => 'exe_format/dex', 'NDS' => 'exe_format/nds', 'XCoff' => 'exe_format/xcoff', 'GameBoyRom' => 'exe_format/gb', 'Bflt' => 'exe_format/bflt', 'Dol' => 'exe_format/dol', 'PYC' => 'exe_format/pyc', 'JavaClass' => 'exe_format/javaclass', 'SWF' => 'exe_format/swf', 'ZIP' => 'exe_format/zip', 'Shellcode_RWX' => 'exe_format/shellcode_rwx', 'Gui' => 'gui', 'WindowsExports' => 'os/windows_exports', 'GNUExports' => 'os/gnu_exports', 'Debugger' => 'debug', 'LinOS' => 'os/linux', 'WinOS' => 'os/windows', 'GdbClient' => 'os/remote', 'Disassembler' => 'disassemble', 'Decompiler' => 'decompile', 'DynLdr' => 'dynldr', } # use the Module.autoload ruby functionnality to load framework components on demand Const_autorequire.each { |cst, file| autoload cst, File.join('metasm', file) } Const_autorequire_equiv.each { |cst, eqv| file = Const_autorequire[eqv] autoload cst, File.join('metasm', file) } end # load Metasm core files %w[main encode decode render exe_format/main os/main].each { |f| require File.join('metasm', f) } # remove an 1.9 warning, couldn't find a compatible way... if Hash.new.respond_to?(:key) puts "using ruby1.9 workaround for Hash#index warning" if $DEBUG class Hash alias index_premetasm index rescue nil undef index rescue nil alias index key end end