about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorFabrice Desclaux <fabrice.desclaux@cea.fr>2016-04-17 22:24:29 +0200
committerserpilliere <fabrice.desclaux@cea.fr>2016-04-18 20:37:22 +0200
commitef5631fd7449f547011f9239870f69fcdd0d1f95 (patch)
tree84fa57aa0cc589dd7eb579a2d9927e611671e361
parentc7478b7e2b98bc9a7c9198d1393732bae16341c5 (diff)
downloadmiasm-ef5631fd7449f547011f9239870f69fcdd0d1f95.tar.gz
miasm-ef5631fd7449f547011f9239870f69fcdd0d1f95.zip
X86/test: add pusha/popa
-rw-r--r--test/arch/x86/unit/mn_pushpop.py125
-rw-r--r--test/test_all.py1
2 files changed, 126 insertions, 0 deletions
diff --git a/test/arch/x86/unit/mn_pushpop.py b/test/arch/x86/unit/mn_pushpop.py
new file mode 100644
index 00000000..d230a088
--- /dev/null
+++ b/test/arch/x86/unit/mn_pushpop.py
@@ -0,0 +1,125 @@
+#! /usr/bin/env python
+from asm_test import Asm_Test_16, Asm_Test_32
+from miasm2.core.utils import pck16, pck32
+
+
+def init_regs(test):
+    test.myjit.cpu.EAX = 0x11111111
+    test.myjit.cpu.EBX = 0x22222222
+    test.myjit.cpu.ECX = 0x33333333
+    test.myjit.cpu.EDX = 0x44444444
+    test.myjit.cpu.ESI = 0x55555555
+    test.myjit.cpu.EDI = 0x66666666
+    test.myjit.cpu.EBP = 0x77777777
+    test.stk_origin = test.myjit.cpu.ESP
+
+
+class Test_PUSHAD_32(Asm_Test_32):
+    MYSTRING = "test pushad 32"
+
+    def prepare(self):
+        self.myjit.ir_arch.symbol_pool.add_label("lbl_ret", self.ret_addr)
+
+    def test_init(self):
+        init_regs(self)
+        self.buf = ""
+        for reg_name in reversed(["EAX", "ECX",
+                                  "EDX", "EBX",
+                                  "ESP", "EBP",
+                                  "ESI", "EDI"]):
+            self.buf += pck32(getattr(self.myjit.cpu, reg_name))
+
+    TXT = '''
+    main:
+       PUSHAD
+       JMP lbl_ret
+    '''
+
+    def check(self):
+        buf = self.myjit.vm.get_mem(self.myjit.cpu.ESP, 0x4 * 8)
+        assert(buf == self.buf)
+
+
+class Test_PUSHA_32(Asm_Test_32):
+    MYSTRING = "test pusha 32"
+
+    def prepare(self):
+        self.myjit.ir_arch.symbol_pool.add_label("lbl_ret", self.ret_addr)
+
+    def test_init(self):
+        init_regs(self)
+        self.buf = ""
+        for reg_name in reversed(["AX", "CX",
+                                  "DX", "BX",
+                                  "SP", "BP",
+                                  "SI", "DI"]):
+            self.buf += pck16(getattr(self.myjit.cpu, reg_name))
+
+    TXT = '''
+    main:
+       PUSHA
+       JMP lbl_ret
+    '''
+
+    def check(self):
+        buf = self.myjit.vm.get_mem(self.myjit.cpu.ESP, 0x2 * 8)
+        assert(buf == self.buf)
+
+
+class Test_PUSHA_16(Asm_Test_16):
+    MYSTRING = "test pusha 16"
+
+    def prepare(self):
+        self.myjit.ir_arch.symbol_pool.add_label("lbl_ret", self.ret_addr)
+
+    def test_init(self):
+        init_regs(self)
+        self.buf = ""
+        for reg_name in reversed(["AX", "CX",
+                                  "DX", "BX",
+                                  "SP", "BP",
+                                  "SI", "DI"]):
+            self.buf += pck16(getattr(self.myjit.cpu, reg_name))
+
+    TXT = '''
+    main:
+       PUSHA
+       JMP lbl_ret
+    '''
+
+    def check(self):
+        buf = self.myjit.vm.get_mem(self.myjit.cpu.SP, 0x2 * 8)
+        assert(buf == self.buf)
+
+
+class Test_PUSHAD_16(Asm_Test_16):
+    MYSTRING = "test pushad 16"
+
+    def prepare(self):
+        self.myjit.ir_arch.symbol_pool.add_label("lbl_ret", self.ret_addr)
+
+    def test_init(self):
+        init_regs(self)
+        self.buf = ""
+        for reg_name in reversed(["EAX", "ECX",
+                                  "EDX", "EBX",
+                                  "ESP", "EBP",
+                                  "ESI", "EDI"]):
+            self.buf += pck32(getattr(self.myjit.cpu, reg_name))
+
+    TXT = '''
+    main:
+       PUSHAD
+       JMP lbl_ret
+    '''
+
+    def check(self):
+        buf = self.myjit.vm.get_mem(self.myjit.cpu.SP, 0x4 * 8)
+        assert(buf == self.buf)
+
+
+if __name__ == "__main__":
+    [test()() for test in [Test_PUSHA_16, Test_PUSHA_32,
+                           Test_PUSHAD_16, Test_PUSHAD_32
+                           ]
+     ]
diff --git a/test/test_all.py b/test/test_all.py
index 34bb0a55..53e8d513 100644
--- a/test/test_all.py
+++ b/test/test_all.py
@@ -58,6 +58,7 @@ for script in ["x86/sem.py",
                "x86/unit/mn_pinsr.py",
                "x86/unit/mn_pextr.py",
                "x86/unit/mn_pmovmskb.py",
+               "x86/unit/mn_pushpop.py",
                "arm/arch.py",
                "arm/sem.py",
                "aarch64/unit/mn_ubfm.py",