kernel_thread简析

1.3.100
static inline pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
{
    long retval;

    __asm__ __volatile__(
        "movl %%esp,%%esi "
        "int $0x80 "        /* Linux/i386 system call */
        "cmpl %%esp,%%esi "    /* child or parent? */
        "je 1f "        /* parent - jump */
        "pushl %3 "        /* push argument */
        "call *%4 "        /* call fn */
        "movl %2,%0 "    /* exit */
        "int $0x80 "
        "1: "
        :"=a" (retval)
        :"0" (__NR_clone), "i" (__NR_exit),
         "r" (arg), "r" (fn),
         "b" (flags | CLONE_VM)
        :"si");
    return retval;
}

1. 执行系统调用 __NR_clone
2. 父进程走1f,子进程调fn
3. fn完成后执行__NR_exit系统调用
4.注:%eax=__NR_clone, %ebx是参数,flags带上了CLONE_VM

原文地址:https://www.cnblogs.com/mull/p/7997523.html