diff dyncallback/dyncall_callback_x64.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
line wrap: on
line diff
--- a/dyncallback/dyncall_callback_x64.c	Sun Mar 19 20:26:01 2017 +0100
+++ b/dyncallback/dyncall_callback_x64.c	Mon Mar 20 23:12:58 2017 +0100
@@ -52,7 +52,8 @@
   int err;
   DCCallback* pcb;
   err = dcAllocWX(sizeof(DCCallback), (void**) &pcb);
-  if (err != 0) return 0;
+  if(err)
+    return NULL;
 
 #if defined (DC__OS_Win64)
   dcbInitThunk(&pcb->thunk, dcCallback_x64_win64); 
@@ -60,6 +61,13 @@
   dcbInitThunk(&pcb->thunk, dcCallback_x64_sysv); 
 #endif
   dcbInitCallback(pcb, signature, handler, userdata);
+
+  err = dcInitExecWX(pcb, sizeof(DCCallback));
+  if(err) {
+    dcFreeWX(pcb, sizeof(DCCallback));
+    return NULL;
+  }
+
   return pcb;
 }