about summary refs log tree commit diff stats
path: root/src/miasm/arch/aarch64/lifter_model_call.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/miasm/arch/aarch64/lifter_model_call.py')
-rw-r--r--src/miasm/arch/aarch64/lifter_model_call.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/miasm/arch/aarch64/lifter_model_call.py b/src/miasm/arch/aarch64/lifter_model_call.py
new file mode 100644
index 00000000..74f25969
--- /dev/null
+++ b/src/miasm/arch/aarch64/lifter_model_call.py
@@ -0,0 +1,50 @@
+#-*- coding:utf-8 -*-
+
+from miasm.ir.analysis import LifterModelCall
+from miasm.arch.aarch64.sem import Lifter_Aarch64l, Lifter_Aarch64b
+
+
+class LifterModelCallAarch64lBase(Lifter_Aarch64l, LifterModelCall):
+
+    def __init__(self, loc_db):
+        Lifter_Aarch64l.__init__(self, loc_db)
+        self.ret_reg = self.arch.regs.X0
+
+
+class LifterModelCallAarch64bBase(Lifter_Aarch64b, LifterModelCall):
+
+    def __init__(self, loc_db):
+        Lifter_Aarch64b.__init__(self, loc_db)
+        self.ret_reg = self.arch.regs.X0
+
+
+class LifterModelCallAarch64l(LifterModelCallAarch64lBase):
+
+    def __init__(self, loc_db):
+        LifterModelCallAarch64lBase.__init__(self, loc_db)
+        self.ret_reg = self.arch.regs.X0
+
+    def get_out_regs(self, _):
+        return set([self.ret_reg, self.sp])
+
+    def sizeof_char(self):
+        return 8
+
+    def sizeof_short(self):
+        return 16
+
+    def sizeof_int(self):
+        return 32
+
+    def sizeof_long(self):
+        return 32
+
+    def sizeof_pointer(self):
+        return 32
+
+
+class LifterModelCallAarch64b(LifterModelCallAarch64bBase, LifterModelCallAarch64l):
+
+    def __init__(self, loc_db):
+        LifterModelCallAarch64bBase.__init__(self, loc_db)
+        self.ret_reg = self.arch.regs.X0