def __init__(self, expr): "@expr: Expr instance" # Init self.languages = list(Translator.available_languages()) self.expr = expr # Initial translation text = Translator.to_language(self.languages[0]).from_expr(self.expr) # Create the Form idaapi.Form.__init__( self, r"""STARTITEM 0 Python Expression {FormChangeCb} <Language:{cbLanguage}> <Translation:{result}> """, { 'result': idaapi.Form.MultiLineTextControl(text=text, flags=translatorForm.flags), 'cbLanguage': idaapi.Form.DropdownListControl( items=self.languages, readonly=True, selval=0), 'FormChangeCb': idaapi.Form.FormChangeCb(self.OnFormChange), })
def __init__(self, expr): "@expr: Expr instance" # Init self.languages = list(Translator.available_languages()) self.expr = expr # Initial translation text = Translator.to_language(self.languages[0]).from_expr(self.expr) # Create the Form idaapi.Form.__init__(self, r"""STARTITEM 0 Python Expression {FormChangeCb} <Language:{cbLanguage}> <Translation:{result}> """, { 'result': idaapi.Form.MultiLineTextControl(text=text, flags=translatorForm.flags), 'cbLanguage': idaapi.Form.DropdownListControl( items=self.languages, readonly=True, selval=0), 'FormChangeCb': idaapi.Form.FormChangeCb(self.OnFormChange), })
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
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))