about summary refs log tree commit diff stats
path: root/example/samples/x86_32_seh.S
blob: a637cccffc7636cb9c3f083a8b4eef8ef604404c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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

;; Single step
lbl_err_5:
	INT        0x1
lbl_err_end5:
	NOP

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
.dword lbl_err_5


labels_err_end:
.dword lbl_err_end0
.dword lbl_err_end1
.dword lbl_err_end2
.dword lbl_err_end3
.dword lbl_err_end4
.dword lbl_err_end5