summaryrefslogtreecommitdiff
path: root/python/mediumlevelil.py
diff options
context:
space:
mode:
authorBrian Potchik <brian@vector35.com>2022-11-20 21:35:06 -0500
committerBrian Potchik <brian@vector35.com>2022-11-20 21:35:06 -0500
commit0763a5064d53a6ec58b7bd40e8c47679d55a81d0 (patch)
treebedd36cb2c0c857ab438389c2ac3e0bdb97b7012 /python/mediumlevelil.py
parentae69370eb054e2d1679aff0247ad3e217df62a62 (diff)
Initial constant expression builtin outliner.
Diffstat (limited to 'python/mediumlevelil.py')
-rw-r--r--python/mediumlevelil.py15
1 files changed, 15 insertions, 0 deletions
diff --git a/python/mediumlevelil.py b/python/mediumlevelil.py
index 535723f7..6d6077c7 100644
--- a/python/mediumlevelil.py
+++ b/python/mediumlevelil.py
@@ -36,6 +36,7 @@ from . import flowgraph
from . import variable
from . import architecture
from . import binaryview
+from . import databuffer
from .interaction import show_graph_report
from .commonil import (
BaseILInstruction, Constant, BinaryOperation, UnaryOperation, Comparison, SSA, Phi, FloatingPoint, ControlFlow,
@@ -146,6 +147,8 @@ class MediumLevelILInstruction(BaseILInstruction):
("src", "var"), ("offset", "int")
], MediumLevelILOperation.MLIL_CONST: [("constant", "int")], MediumLevelILOperation.MLIL_CONST_PTR: [
("constant", "int")
+ ], MediumLevelILOperation.MLIL_CONST_DATA: [("constant", "int")], MediumLevelILOperation.MLIL_CONST_DATA: [
+ ("constant", "int")
], MediumLevelILOperation.MLIL_EXTERN_PTR: [
("constant", "int"), ("offset", "int")
], MediumLevelILOperation.MLIL_FLOAT_CONST: [("constant", "float")], MediumLevelILOperation.MLIL_IMPORT: [
@@ -1029,6 +1032,17 @@ class MediumLevelILConst(MediumLevelILConstBase):
@dataclass(frozen=True, repr=False, eq=False)
+class MediumLevelILConstData(MediumLevelILConstBase):
+ @property
+ def constant(self) -> 'DataBuffer':
+ return self.function.source_function.view.get_constant_data(self._get_int(0))
+
+ @property
+ def operands(self) -> List[databuffer.DataBuffer]:
+ return [self.constant]
+
+
+@dataclass(frozen=True, repr=False, eq=False)
class MediumLevelILConstPtr(MediumLevelILConstBase):
@property
def constant(self) -> int:
@@ -2488,6 +2502,7 @@ ILInstruction = {
MediumLevelILOperation.MLIL_VAR: MediumLevelILVar, # [("src", "var")],
MediumLevelILOperation.MLIL_ADDRESS_OF: MediumLevelILAddressOf, # [("src", "var")],
MediumLevelILOperation.MLIL_CONST: MediumLevelILConst, # [("constant", "int")],
+ MediumLevelILOperation.MLIL_CONST_DATA: MediumLevelILConstData, # [("constant", "int")],
MediumLevelILOperation.MLIL_CONST_PTR: MediumLevelILConstPtr, # [("constant", "int")],
MediumLevelILOperation.MLIL_FLOAT_CONST: MediumLevelILFloatConst, # [("constant", "float")],
MediumLevelILOperation.MLIL_IMPORT: MediumLevelILImport, # [("constant", "int")],