about summary refs log tree commit diff stats
path: root/example/expression/expr_translate.py
blob: e1505dae0213727cbdc36b79fead7116a9194ac0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import random

from miasm2.expression.expression import *
from miasm2.expression.expression_helper import ExprRandom
from miasm2.ir.translators import Translator

random.seed(0)

class ExprRandom_OpSubRange(ExprRandom):
    operations_by_args_number = {1: ["-"],
                                 2: ["<<", ">>",],
                                 "2+": ["+", "*", "&", "|", "^"],
                                 }


print "[+] Compute a random expression:"
expr = ExprRandom_OpSubRange.get(depth=8)
print "-> %s" % expr
print

target_exprs = {lang:Translator.to_language(lang).from_expr(expr)
                for lang in Translator.available_languages()}
for target_lang, target_expr in target_exprs.iteritems():
    print "[+] Translate in %s:" % target_lang
    print target_expr
    print

print "[+] Eval in Python:"
def memory(addr, size):
    ret = random.randint(0, (1 << size) - 1)
    print "Memory access: @0x%x -> 0x%x" % (addr, ret)
    return ret

for expr_id in expr.get_r(mem_read=True):
    if isinstance(expr_id, ExprId):
        value = random.randint(0, (1 << expr_id.size) - 1)
        print "Declare var: %s = 0x%x" % (expr_id.name, value)
        globals()[expr_id.name] = value

print "-> 0x%x" % eval(target_exprs["Python"])

print "[+] Validate the Miasm syntax rebuilding"
exprRebuild = eval(target_exprs["Miasm"])
assert(expr == exprRebuild)