diff options
| author | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2016-04-17 22:24:29 +0200 |
|---|---|---|
| committer | serpilliere <fabrice.desclaux@cea.fr> | 2016-04-18 20:37:22 +0200 |
| commit | ef5631fd7449f547011f9239870f69fcdd0d1f95 (patch) | |
| tree | 84fa57aa0cc589dd7eb579a2d9927e611671e361 | |
| parent | c7478b7e2b98bc9a7c9198d1393732bae16341c5 (diff) | |
| download | miasm-ef5631fd7449f547011f9239870f69fcdd0d1f95.tar.gz miasm-ef5631fd7449f547011f9239870f69fcdd0d1f95.zip | |
X86/test: add pusha/popa
| -rw-r--r-- | test/arch/x86/unit/mn_pushpop.py | 125 | ||||
| -rw-r--r-- | test/test_all.py | 1 |
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", |