Search code examples
cmemoryprocessmallocclone

How do I get a function to execute in a different address space? Writing a clone function


I have this code that gives me a segmentation fault. My understanding of the clone function is that the parent process has to allocate space for the child process and clone calls a function that runs in that stack space. Am I misunderstanding something or does my code just not make sense?

char *stack;
char *stackTop; 


    stack = malloc(STACK_SIZE);
    if (stack == NULL)
        fprintf(stderr, "malloc");
    stackTop = stack + STACK_SIZE;  
    myClone(childFunc, stackTop, CLONE_FILES, NULL);

int myClone(int (*fn)(void *), void *child_stack,int flags, void *arg){
  int* space = memcpy(child_stack, fn, sizeof(fn));
  typedef int func(void);
  func* f = (func*)&space;
  f();
}

Solution

  • The clone() function is a system call. It cannot be replicated by C code running within your process.