diff options
| author | Ajax <commial@gmail.com> | 2016-06-29 09:53:11 +0200 |
|---|---|---|
| committer | Ajax <commial@gmail.com> | 2016-09-01 17:34:50 +0200 |
| commit | a457fc4ccf04968b3b0ff629ae666d39336a1eaa (patch) | |
| tree | 669d91105e379133e6d4bc9a4aa249255f17723d | |
| parent | bb3433682f92fe5a74a89d8984561cd4f2de2120 (diff) | |
| download | miasm-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.py | 42 |
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]] |