Miasm2
Main Page
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Properties
Macros
miasm2
ir
translators
python.py
Go to the documentation of this file.
1
from
miasm2.ir.translators.translator
import
Translator
2
3
4
class
TranslatorPython
(
Translator
):
5
"""Translate a Miasm expression to an equivalent Python code
6
7
Memory is abstracted using the unimplemented function:
8
int memory(int address, int size)
9
"""
10
11
# Implemented language
12
__LANG__ =
"Python"
13
# Operations translation
14
op_no_translate = [
"+"
,
"-"
,
"/"
,
"%"
,
">>"
,
"<<"
,
"&"
,
"^"
,
"|"
,
"*"
]
15
16
def
from_ExprInt
(self, expr):
17
return
str(expr)
18
19
def
from_ExprId
(self, expr):
20
return
str(expr)
21
22
def
from_ExprMem
(self, expr):
23
return
"memory(%s, 0x%x)"
% (self.
from_expr
(expr.arg),
24
expr.size / 8)
25
26
def
from_ExprSlice
(self, expr):
27
out = self.
from_expr
(expr.arg)
28
if
expr.start != 0:
29
out =
"(%s >> %d)"
% (out, expr.start)
30
return
"(%s & 0x%x)"
% (out, (1 << (expr.stop - expr.start)) - 1)
31
32
def
from_ExprCompose
(self, expr):
33
out = []
34
for
subexpr, start, stop
in
expr.args:
35
out.append(
"((%s & 0x%x) << %d)"
% (self.
from_expr
(subexpr),
36
(1 << (stop - start)) - 1,
37
start))
38
return
"(%s)"
%
' | '
.join(out)
39
40
def
from_ExprCond
(self, expr):
41
return
"(%s if (%s) else %s)"
% (self.
from_expr
(expr.src1),
42
self.
from_expr
(expr.cond),
43
self.
from_expr
(expr.src2))
44
45
def
from_ExprOp
(self, expr):
46
if
expr.op
in
self.
op_no_translate
:
47
args = map(self.
from_expr
, expr.args)
48
if
len(expr.args) == 1:
49
return
"((%s %s) & 0x%x)"
% (expr.op,
50
args[0],
51
(1 << expr.size) - 1)
52
else
:
53
return
"((%s) & 0x%x)"
% ((
" %s "
% expr.op).join(args),
54
(1 << expr.size) - 1)
55
elif
expr.op ==
"parity"
:
56
return
"(%s & 0x1)"
% self.
from_expr
(expr.args[0])
57
58
raise
NotImplementedError(
"Unknown operator: %s"
% expr.op)
59
60
def
from_ExprAff
(self, expr):
61
return
"%s = %s"
% tuple(map(self.
from_expr
, (expr.dst, expr.src)))
62
63
64
# Register the class
65
Translator.register(TranslatorPython)
miasm2.ir.translators.python.TranslatorPython.from_ExprCompose
def from_ExprCompose
Definition:
python.py:32
miasm2.ir.translators.python.TranslatorPython.from_ExprInt
def from_ExprInt
Definition:
python.py:16
miasm2.ir.translators.translator.Translator.from_expr
def from_expr
Definition:
translator.py:92
miasm2.ir.translators.python.TranslatorPython.from_ExprOp
def from_ExprOp
Definition:
python.py:45
miasm2.ir.translators.python.TranslatorPython.op_no_translate
list op_no_translate
Definition:
python.py:14
miasm2.ir.translators.translator.Translator
Definition:
translator.py:5
miasm2.ir.translators.translator
Definition:
translator.py:1
miasm2.ir.translators.python.TranslatorPython.from_ExprMem
def from_ExprMem
Definition:
python.py:22
miasm2.ir.translators.python.TranslatorPython.from_ExprSlice
def from_ExprSlice
Definition:
python.py:26
miasm2.ir.translators.python.TranslatorPython.from_ExprCond
def from_ExprCond
Definition:
python.py:40
miasm2.ir.translators.python.TranslatorPython.from_ExprAff
def from_ExprAff
Definition:
python.py:60
miasm2.ir.translators.python.TranslatorPython
Definition:
python.py:4
miasm2.ir.translators.python.TranslatorPython.from_ExprId
def from_ExprId
Definition:
python.py:19
Generated by
1.8.8