mirror of
https://github.com/cea-sec/miasm
synced 2026-06-21 13:48:18 +00:00
59 lines
1.7 KiB
Python
59 lines
1.7 KiB
Python
from __future__ import print_function
|
|
import random
|
|
|
|
from future.utils import viewitems
|
|
|
|
from miasm.expression.expression import *
|
|
from miasm.expression.expression_helper import ExprRandom
|
|
from miasm.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 viewitems(target_exprs):
|
|
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)
|
|
|
|
|
|
a = ExprId("a", 32)
|
|
b = ExprId("b", 32)
|
|
cst1 = ExprInt(1, 32)
|
|
eq_test = ExprOp("==", a, b + cst1)
|
|
|
|
for lang in Translator.available_languages():
|
|
translator = Translator.to_language(lang)
|
|
print("Translate to %s:" % lang)
|
|
print(translator.from_expr(eq_test))
|