Mercurial > pub > dyncall > dyncall
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 |