comparison dyncallback/dyncall_callback_arm32.c @ 202:030fbb70aa1b

- changed allocwx code: * to introduce a call allowing to switch the written page to be executable (e.g. using mprotect) * changed mmap based code so page is always W^X
author Tassilo Philipp
date Mon, 20 Mar 2017 23:12:58 +0100
parents d48a8b8d2ef9
children f5577f6bf97a
comparison
equal deleted inserted replaced
201:136409adbdd1 202:030fbb70aa1b
49 DCCallback* dcbNewCallback(const char* signature, DCCallbackHandler* handler, void* userdata) 49 DCCallback* dcbNewCallback(const char* signature, DCCallbackHandler* handler, void* userdata)
50 { 50 {
51 int err; 51 int err;
52 DCCallback* pcb; 52 DCCallback* pcb;
53 err = dcAllocWX(sizeof(DCCallback), (void**)&pcb); 53 err = dcAllocWX(sizeof(DCCallback), (void**)&pcb);
54 if(err || !pcb) 54 if(err)
55 return 0; 55 return NULL;
56
56 dcbInitThunk(&pcb->thunk, dcCallbackThunkEntry); 57 dcbInitThunk(&pcb->thunk, dcCallbackThunkEntry);
57 dcbInitCallback(pcb, signature, handler, userdata); 58 dcbInitCallback(pcb, signature, handler, userdata);
59
60 err = dcInitExecWX(pcb, sizeof(DCCallback));
61 if(err) {
62 dcFreeWX(pcb, sizeof(DCCallback));
63 return NULL;
64 }
65
58 return pcb; 66 return pcb;
59 } 67 }
60 68
61 69
62 void dcbFreeCallback(DCCallback* pcb) 70 void dcbFreeCallback(DCCallback* pcb)