#define _GNU_SOURCE
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void func();
void main(int argc,char **argv)
{
printf("i am main\n");
int clone_flag,arg,retval;
char *stack;
clone_flag=CLONE_VM|CLONE_SIGHAND;
stack=(char*)malloc(4096);
retval=clone((void*)func,&(stack[4095]),clone_flag,NULL);
stack=(char*)malloc(4096);
retval=clone((void*)func,&(stack[4095]),clone_flag,NULL);
}
void func()
{
int i;
for(i=0;i<3;i++)
{
printf("i: %d\n ",i);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
i am main
i: 0
i: 1
Run Code Online (Sandbox Code Playgroud)
strace-f
5915 fstat(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(4, 1), ...}) = 0
5915 ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0
5915 brk(NULL) = 0xaf2000
5915 brk(0xb14000) = 0xb14000
5915 write(1, …Run Code Online (Sandbox Code Playgroud)