From 2858e916f35f0469baeea23632ddd8befdd7ca5d Mon Sep 17 00:00:00 2001 From: Fabrice Desclaux Date: Thu, 11 Aug 2016 12:54:07 +0200 Subject: Tests: add win seh test --- example/samples/x86_32_seh.S | 76 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 example/samples/x86_32_seh.S (limited to 'example/samples') diff --git a/example/samples/x86_32_seh.S b/example/samples/x86_32_seh.S new file mode 100644 index 00000000..7bb2c3cd --- /dev/null +++ b/example/samples/x86_32_seh.S @@ -0,0 +1,76 @@ + +main: + PUSH error + PUSH DWORD PTR FS:[0x0] + MOV DWORD PTR FS:[0x0], ESP + XOR EAX, EAX + +;; Access violation +lbl_err_0: + MOV DWORD PTR [EAX], 0x0 +lbl_err_end0: + NOP + + +;; Breakpoint +lbl_err_1: + INT 0x3 +lbl_err_end1: + NOP + +;; Divide by 0 + XOR EAX, EAX +lbl_err_2: + DIV EAX +lbl_err_end2: + NOP + +;; Privileged instruction +lbl_err_3: + STI +lbl_err_end3: + NOP + +;; Unknown instruction (Bad LEA encoding) +lbl_err_4: + .byte 0x8D, 0xC0 +lbl_err_end4: + NOP + + POP DWORD PTR FS:[0x0] + ADD ESP, 4 + RET + +error: + MOV ECX, DWORD PTR [ESP+0xC] + MOV EAX, DWORD PTR [ECX+0xB8] + MOV EBX, DWORD PTR [err_num] + CMP EAX, DWORD PTR [labels_err + 4*EBX] + JZ error_address_ok + INT 0x3 +error_address_ok: + INC DWORD PTR [err_num] + MOV EAX, DWORD PTR [labels_err_end + 4*EBX] + MOV DWORD PTR [ECX+0xB8], EAX + XOR EAX, EAX + RET + + + +err_num: +.dword 0 + +labels_err: +.dword lbl_err_0 +.dword lbl_err_end1 +.dword lbl_err_2 +.dword lbl_err_3 +.dword lbl_err_4 + + +labels_err_end: +.dword lbl_err_end0 +.dword lbl_err_end1 +.dword lbl_err_end2 +.dword lbl_err_end3 +.dword lbl_err_end4 -- cgit 1.4.1