about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAjax <commial@gmail.com>2016-06-29 09:53:11 +0200
committerAjax <commial@gmail.com>2016-09-01 17:34:50 +0200
commita457fc4ccf04968b3b0ff629ae666d39336a1eaa (patch)
tree669d91105e379133e6d4bc9a4aa249255f17723d
parentbb3433682f92fe5a74a89d8984561cd4f2de2120 (diff)
downloadmiasm-a457fc4ccf04968b3b0ff629ae666d39336a1eaa.tar.gz
miasm-a457fc4ccf04968b3b0ff629ae666d39336a1eaa.zip
Regression test for SEH with a double handler
Diffstat (limited to '')
-rw-r--r--test/arch/x86/unit/mn_seh.py42
1 files changed, 41 insertions, 1 deletions
diff --git a/test/arch/x86/unit/mn_seh.py b/test/arch/x86/unit/mn_seh.py
index 12750b05..cc8b5cc2 100644
--- a/test/arch/x86/unit/mn_seh.py
+++ b/test/arch/x86/unit/mn_seh.py
@@ -62,5 +62,45 @@ class Test_SEH_simple(Test_SEH):
         assert(self.myjit.cpu.EBX == DEFAULT_SEH)
 
 
+class Test_SEH_double(Test_SEH_simple):
+    TXT = '''
+    main:
+       XOR EAX, EAX
+       XOR EDX, EDX
+
+       PUSH handler1
+       PUSH DWORD PTR FS:[EDX]
+       MOV DWORD PTR FS:[EDX], ESP
+
+       PUSH handler2
+       PUSH DWORD PTR FS:[EDX]
+       MOV DWORD PTR FS:[EDX], ESP
+
+       STI
+
+       MOV EBX, DWORD PTR [ESP]
+       MOV DWORD PTR FS:[EDX], EBX
+       ADD ESP, 0x8
+
+       MOV EBX, DWORD PTR [ESP]
+       MOV DWORD PTR FS:[EDX], EBX
+       ADD ESP, 0x8
+
+       RET
+
+    handler1:
+       MOV EAX, 0x1
+       RET
+
+    handler2:
+       MOV ECX, DWORD PTR [ESP+0xC]
+       INC DWORD PTR [ECX+0x%08x]
+       MOV DWORD PTR [ECX+0x%08x], 0xcafebabe
+       XOR EAX, EAX
+       RET
+    ''' % (ContextException.get_offset("eip"),
+           ContextException.get_offset("eax"))
+
+
 if __name__ == "__main__":
-    [test(*sys.argv[1:])() for test in [Test_SEH_simple]]
+    [test(*sys.argv[1:])() for test in [Test_SEH_simple, Test_SEH_double]]