comparison dyncallback/dyncall_callback_x86.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
263 DCCallback* dcbNewCallback(const char* signature, DCCallbackHandler* handler, void* userdata) 263 DCCallback* dcbNewCallback(const char* signature, DCCallbackHandler* handler, void* userdata)
264 { 264 {
265 int err; 265 int err;
266 DCCallback* pcb; 266 DCCallback* pcb;
267 err = dcAllocWX(sizeof(DCCallback), (void**) &pcb); 267 err = dcAllocWX(sizeof(DCCallback), (void**) &pcb);
268 if (err != 0) return 0; 268 if(err)
269 return NULL;
269 270
270 dcbInitThunk(&pcb->thunk, dcCallbackThunkEntry); 271 dcbInitThunk(&pcb->thunk, dcCallbackThunkEntry);
271 dcbInitCallback(pcb, signature, handler, userdata); 272 dcbInitCallback(pcb, signature, handler, userdata);
273
274 err = dcInitExecWX(pcb, sizeof(DCCallback));
275 if(err) {
276 dcFreeWX(pcb, sizeof(DCCallback));
277 return NULL;
278 }
279
272 return pcb; 280 return pcb;
273 } 281 }
274 282
275 /* 283 /*
276 * free 284 * free