- Notifications
You must be signed in to change notification settings - Fork 7.8k
/
Copy pathphpdbg_win.c
43 lines (38 loc) · 1.83 KB
/
phpdbg_win.c
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
/*
+----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| https://www.php.net/license/3_01.txt |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Felipe Pena <felipe@php.net> |
| Authors: Joe Watkins <joe.watkins@live.co.uk> |
| Authors: Bob Weinand <bwoebi@php.net> |
+----------------------------------------------------------------------+
*/
#include"zend.h"
#include"phpdbg.h"
intmprotect(void*addr, size_tsize, intprotection) {
intvar;
return (int)VirtualProtect(addr, size, protection== (PROT_READ | PROT_WRITE) ? PAGE_READWRITE : PAGE_READONLY, &var);
}
intphpdbg_exception_handler_win32(EXCEPTION_POINTERS*xp) {
EXCEPTION_RECORD*xr=xp->ExceptionRecord;
CONTEXT*xc=xp->ContextRecord;
switch (xr->ExceptionCode) {
caseEXCEPTION_ACCESS_VIOLATION:
caseEXCEPTION_ARRAY_BOUNDS_EXCEEDED:
caseEXCEPTION_STACK_OVERFLOW:
if (phpdbg_watchpoint_segfault_handler((void*)xr->ExceptionInformation[1]) ==SUCCESS) {
returnEXCEPTION_CONTINUE_EXECUTION;
}
break;
EMPTY_SWITCH_DEFAULT_CASE()
}
returnEXCEPTION_CONTINUE_SEARCH;
}