mirror of
https://github.com/cea-sec/miasm
synced 2026-06-21 13:48:18 +00:00
6e09df71a3
Fat patch here: some API have changed. Each irbloc now affects a special "IRDst" register which is used to describe the destination irbloc. It allows simple description of architectures using delay slots. Architectures semantic and tcc/python jitter are modified in consequence. LLVM jitter is disabled for now, but should be patch soon.
157 lines
5.6 KiB
Python
Executable File
157 lines
5.6 KiB
Python
Executable File
#! /usr/bin/env python
|
|
|
|
from distutils.core import setup, Extension
|
|
from distutils.util import get_platform
|
|
import shutil
|
|
import os, sys
|
|
|
|
def buil_all():
|
|
packages=['miasm2',
|
|
'miasm2/arch',
|
|
'miasm2/arch/x86',
|
|
'miasm2/arch/arm',
|
|
'miasm2/arch/msp430',
|
|
'miasm2/arch/sh4',
|
|
'miasm2/arch/mips32',
|
|
'miasm2/core',
|
|
'miasm2/expression',
|
|
'miasm2/ir',
|
|
'miasm2/analysis',
|
|
'miasm2/jitter',
|
|
'miasm2/jitter/arch',
|
|
'miasm2/jitter/os_dep',
|
|
]
|
|
ext_modules_no_tcc = [
|
|
Extension("miasm2.jitter.arch.JitCore_x86",
|
|
["miasm2/jitter/vm_mngr.c",
|
|
"miasm2/jitter/vm_mngr_py.c",
|
|
"miasm2/jitter/arch/JitCore.c",
|
|
"miasm2/jitter/arch/JitCore_x86.c"]),
|
|
Extension("miasm2.jitter.arch.JitCore_arm",
|
|
["miasm2/jitter/vm_mngr.c",
|
|
"miasm2/jitter/vm_mngr_py.c",
|
|
"miasm2/jitter/arch/JitCore.c",
|
|
"miasm2/jitter/arch/JitCore_arm.c"]),
|
|
Extension("miasm2.jitter.arch.JitCore_msp430",
|
|
["miasm2/jitter/vm_mngr.c",
|
|
"miasm2/jitter/vm_mngr_py.c",
|
|
"miasm2/jitter/arch/JitCore.c",
|
|
"miasm2/jitter/arch/JitCore_msp430.c"]),
|
|
Extension("miasm2.jitter.arch.JitCore_mips32",
|
|
["miasm2/jitter/vm_mngr.c",
|
|
"miasm2/jitter/vm_mngr_py.c",
|
|
"miasm2/jitter/arch/JitCore.c",
|
|
"miasm2/jitter/arch/JitCore_mips32.c"]),
|
|
Extension("miasm2.jitter.Jitllvm",
|
|
["miasm2/jitter/Jitllvm.c"]),
|
|
]
|
|
|
|
ext_modules_all = [
|
|
Extension("miasm2.jitter.arch.JitCore_x86",
|
|
["miasm2/jitter/vm_mngr.c",
|
|
"miasm2/jitter/vm_mngr_py.c",
|
|
"miasm2/jitter/arch/JitCore.c",
|
|
"miasm2/jitter/arch/JitCore_x86.c"]),
|
|
Extension("miasm2.jitter.arch.JitCore_arm",
|
|
["miasm2/jitter/vm_mngr.c",
|
|
"miasm2/jitter/vm_mngr_py.c",
|
|
"miasm2/jitter/arch/JitCore.c",
|
|
"miasm2/jitter/arch/JitCore_arm.c"]),
|
|
Extension("miasm2.jitter.arch.JitCore_msp430",
|
|
["miasm2/jitter/vm_mngr.c",
|
|
"miasm2/jitter/vm_mngr_py.c",
|
|
"miasm2/jitter/arch/JitCore.c",
|
|
"miasm2/jitter/arch/JitCore_msp430.c"]),
|
|
Extension("miasm2.jitter.arch.JitCore_mips32",
|
|
["miasm2/jitter/vm_mngr.c",
|
|
"miasm2/jitter/vm_mngr_py.c",
|
|
"miasm2/jitter/arch/JitCore.c",
|
|
"miasm2/jitter/arch/JitCore_mips32.c"]),
|
|
Extension("miasm2.jitter.Jitllvm",
|
|
["miasm2/jitter/Jitllvm.c"]),
|
|
Extension("miasm2.jitter.Jittcc",
|
|
["miasm2/jitter/Jittcc.c"],
|
|
libraries=["tcc"])
|
|
]
|
|
|
|
print 'building'
|
|
build_ok = False
|
|
for name, ext_modules in [('all', ext_modules_all),
|
|
('notcc', ext_modules_no_tcc)]:
|
|
print 'build with', repr(name)
|
|
try:
|
|
s = setup(
|
|
name = 'Miasm',
|
|
version = '2.0',
|
|
packages = packages,
|
|
package_data = {'miasm2':['jitter/*.h',
|
|
'jitter/arch/*.h',]},
|
|
ext_modules = ext_modules,
|
|
# Metadata
|
|
author = 'Fabrice Desclaux',
|
|
author_email = 'serpilliere@droid-corp.org',
|
|
description = 'Machine code manipulation library',
|
|
license = 'GPLv2',
|
|
# keywords = '',
|
|
# url = '',
|
|
)
|
|
except SystemExit, e:
|
|
print repr(e)
|
|
continue
|
|
build_ok = True
|
|
break
|
|
if not build_ok:
|
|
raise ValueError('Unable to build Miasm!')
|
|
print 'build', name
|
|
if name == 'notcc':
|
|
print
|
|
print "*"*80
|
|
print "Warning: TCC is not properly installed,"
|
|
print "Miasm will be installed without TCC Jitter"
|
|
print "Etheir install TCC or use LLVM jitter"
|
|
print "*"*80
|
|
print
|
|
# we copy libraries from build dir to current miasm directory
|
|
build_base = None
|
|
if 'build' in s.command_options:
|
|
if 'build_base' in s.command_options['build']:
|
|
build_base = s.command_options['build']['build_base']
|
|
if build_base is None:
|
|
build_base = "build"
|
|
plat_specifier = ".%s-%s" % (get_platform(), sys.version[0:3])
|
|
build_base = os.path.join('build','lib' + plat_specifier)
|
|
print build_base
|
|
|
|
def buil_no_tcc():
|
|
setup(
|
|
name = 'Miasm',
|
|
version = '2.0',
|
|
packages=['miasm2', 'miasm2/tools',
|
|
'miasm2/expression', 'miasm2/graph', 'miasm2/arch',
|
|
'miasm2/core', 'miasm2/tools/emul_lib' ],
|
|
package_data = {'miasm2':['tools/emul_lib/*.h']},
|
|
# data_files = [('toto', ['miasm2/tools/emul_lib/queue.h'])],
|
|
# Metadata
|
|
author = 'Fabrice Desclaux',
|
|
author_email = 'serpilliere@droid-corp.org',
|
|
description = 'Machine code manipulation library',
|
|
license = 'GPLv2',
|
|
# keywords = '',
|
|
# url = '',
|
|
)
|
|
|
|
|
|
def try_build():
|
|
buil_all()
|
|
"""
|
|
try:
|
|
buil_all()
|
|
return
|
|
except:
|
|
print "WARNING cannot build with libtcc!, trying without it"
|
|
print "Miasm will not be able to emulate code"
|
|
buil_no_tcc()
|
|
"""
|
|
|
|
try_build()
|