DOS-debug

Форк
0
/
TRAPD.INC 
181 строка · 3.4 Кб
1

2
;--- debugger entries for DPMI protected-mode
3
;--- exceptions ( 0, 1, 3, 6, 7, C, D, E )
4

5
;--- stack frames DPMI exception handlers 16/32-bit
6

7
EXFR16 struc
8
		dw 8 dup (?)	; pusha
9
wMsg	dw ?
10
		dw 2 dup (?)	; far16 return to DPMI
11
wErrC	dw ?
12
rIP		dw ?
13
rCS		dw ?
14
rFL		dw ?
15
rSP		dw ?
16
rSS		dw ?
17
EXFR16 ends
18

19
EXFR32 struc
20
		dd 8 dup (?)	; pushad
21
wMsg	dw ?
22
		dd 2 dup (?)	; far32 return to DPMI
23
dwErrC	dd ?
24
rEIP	dd ?
25
rCS		dw ?
26
		dw ?
27
rEFL	dd ?
28
rESP	dd ?
29
rSS		dw ?
30
		dw ?
31
EXFR32 ends
32

33
excxx_16:
34
	pusha
35
	mov bp,sp
36
	push ds
37
	mov ds,cs:[dssel]
38
	mov ax,[bp].EXFR16.rIP
39
	mov bx,[bp].EXFR16.rCS
40
	mov cx,[bp].EXFR16.rFL
41
	mov dx,[bp].EXFR16.rSP
42
	mov si,[bp].EXFR16.rSS
43
	mov di,[bp].EXFR16.wMsg
44
	mov [bp].EXFR16.rCS, cs
45
	mov [bp].EXFR16.rSS, ds
46
	cmp [bInDbg],0				;did the exception occur inside DEBUG?
47
	jz isdebuggee16
48
if EXCCSIP
49
	mov si, bx
50
endif
51
	mov [bp].EXFR16.rIP,offset ue_intx
52
	mov bx, [top_sp]
53
	sub bx, 3*2
54
	mov [bx+0], di
55
if EXCCSIP
56
	mov [bx+2], si
57
	mov [bx+4], ax
58
endif
59
	mov [bp].EXFR16.rSP, bx
60
	and byte ptr [bp].EXFR16.rFL+1, not 1	;reset TF
61
	pop ax
62
	jmp back2dpmi16
63
isdebuggee16:
64
	mov [bp].EXFR16.rIP, offset intrtn
65
	and byte ptr [bp].EXFR16.rFL+1, not 3	;reset IF + TF
66
	mov [bp].EXFR16.rSP, offset regs.rSS
67
	mov [regs.rIP],ax
68
	mov word ptr [regs.rIP+2],0
69
	mov [regs.rCS],bx
70
	mov [regs.rFL],cx
71
	mov [regs.rSP],dx
72
	mov [regs.rSS],si
73
	mov [run_intw],di
74
;	pop ax
75
;	mov [regs.rDS],ax
76
;	mov ds,ax
77
	pop ds
78
back2dpmi16:
79
	popa
80
	add sp, 2
81
	retf
82

83
exc00:
84
	push EXC00MSG
85
	jmp exc_xx
86
exc01:
87
	push EXC01MSG
88
	jmp exc_xx
89
exc03:
90
	push EXC03MSG
91
	jmp exc_xx
92
if CATCHEXC06
93
exc06:
94
	push EXC06MSG
95
	jmp exc_xx
96
endif
97
if CATCHEXC07
98
exc07:
99
	push EXC07MSG
100
	jmp exc_xx
101
endif
102
if CATCHEXC0C
103
exc0c:
104
	push EXC0CMSG
105
	jmp exc_xx
106
endif
107
exc0d:
108
	push EXC0DMSG
109
	jmp exc_xx
110
exc0e:
111
	push EXC0EMSG
112
exc_xx:
113
	test cs:[dpmi32],1
114
	jz excxx_16
115

116
	.386
117

118
	pushad
119
	mov ebp,esp
120
	push ds
121
	mov ds,cs:[dssel]
122
	mov eax,[ebp].EXFR32.rEIP
123
	mov bx, [ebp].EXFR32.rCS
124
	mov ecx,[ebp].EXFR32.rEFL
125
	mov edx,[ebp].EXFR32.rESP
126
	mov si, [ebp].EXFR32.rSS
127
	mov di, [ebp].EXFR32.wMsg
128
	mov [ebp].EXFR32.rCS, cs
129
	mov [ebp].EXFR32.rSS, ds
130
	cmp [bInDbg],0	;did the exception occur inside DEBUG?
131
	jz isdebuggee32
132
if EXCCSIP
133
;--- it's assumed that an exception in DEBUG is always in 16-bit code,
134
;--- but this isn't necessarily true, since the debuggee may have hooked
135
;--- exceptions. Since v2.0, this is less probable, because DebugX will
136
;--- always restore exception handlers 0D/0E on entry.
137
	mov si, bx
138
endif
139
	mov [ebp].EXFR32.rEIP,offset ue_intx
140
	movzx ebx,[top_sp]
141
if EXCCSIP
142
 if EXCCSEIP
143
	sub bx, 2*2+4
144
 else
145
	sub bx, 3*2
146
 endif
147
else
148
	sub bx, 2
149
endif
150
	mov [bx+0], di	; msg
151
 if EXCCSIP
152
	mov [bx+2], si	; cs
153
  if EXCCSEIP
154
	mov [bx+4], eax
155
  else
156
	mov [bx+4], ax
157
  endif
158
 endif
159
	mov [ebp].EXFR32.rESP, ebx
160
	and byte ptr [ebp].EXFR32.rEFL+1, not 1	;reset TF
161
	pop ax
162
	jmp back2dpmi32
163
isdebuggee32:
164
	@dprintf "excxx: client exception"
165
	mov [ebp].EXFR32.rEIP, offset intrtn
166
	and byte ptr  [ebp].EXFR32.rEFL+1, not 3;reset IF + TF
167
	mov [ebp].EXFR32.rESP, offset regs.rSS
168
	mov dword ptr [regs.rIP], eax
169
	mov [regs.rCS],bx
170
;	mov dword ptr [regs.rFL], ecx	; preferable?
171
	mov [regs.rFL],cx
172
	mov dword ptr [regs.rSP], edx
173
	mov [regs.rSS],si
174
	mov [run_intw],di
175
;	pop ax
176
;	mov [regs.rDS],ax
177
;	mov ds,ax
178
	pop ds
179
back2dpmi32:
180
	popad
181
	add sp, 2
182
	retd
183

184

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.