comparison dyncallback/dyncall_callback_arm64.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
48 DCCallback* dcbNewCallback(const char* signature, DCCallbackHandler* handler, void* userdata) 48 DCCallback* dcbNewCallback(const char* signature, DCCallbackHandler* handler, void* userdata)
49 { 49 {
50 int err; 50 int err;
51 DCCallback* pcb; 51 DCCallback* pcb;
52 err = dcAllocWX(sizeof(DCCallback), (void**) &pcb); 52 err = dcAllocWX(sizeof(DCCallback), (void**) &pcb);
53 if (err != 0) return 0; 53 if(err)
54 return NULL;
54 55
55 dcbInitThunk(&pcb->thunk, dcCallbackThunkEntry); 56 dcbInitThunk(&pcb->thunk, dcCallbackThunkEntry);
56 dcbInitCallback(pcb, signature, handler, userdata); 57 dcbInitCallback(pcb, signature, handler, userdata);
58
59 err = dcInitExecWX(pcb, sizeof(DCCallback));
60 if(err) {
61 dcFreeWX(pcb, sizeof(DCCallback));
62 return NULL;
63 }
64
57 return pcb; 65 return pcb;
58 } 66 }
59 67
60 void dcbFreeCallback(DCCallback* pcb) 68 void dcbFreeCallback(DCCallback* pcb)
61 { 69 {