According to this thread,memory allocated by malloc at least have PROT_READ | PROT_EXEC,otherwise the contaned function can\'t be executed .
malloc
PROT_READ | PROT_EXEC
You may need to call mprotect to set the PROT_EXEC flag yourself, after the memory has been allocated.
mprotect
PROT_EXEC
$ man mprotect