在linux中克隆()系统调用

时间:2012-10-12 08:52:44

标签: linux linux-kernel system-calls

当我通过传递0作为stack_start来调用克隆系统调用时会发生什么? 根据克隆的手册页面,它应该返回-EINVAL,但是当我这样做时,它会显示SIGSEGV (11)错误。

clone(func,NULL,0,args);

应该返回-EINVAL,但是它失败了SIGSEGV

1 个答案:

答案 0 :(得分:1)

根据linux内核有这样一个调用链:

sys_clone(...stack_start...) - > do_fork

do_fork(...stack_start...) - > copy_process

copy_process(...stack_start...) - > copy_thread

copy_thread(...stack_start...) on X86_32copy_thread(...stack_start...) on X86_64

查看copy_thread会让我假设因为此函数不检查stack_start正确性(代码中的sp参数)所以在克隆之后我们有一个带有无效堆栈指针和第一个引用的任务零地址导致SIGSEGV

我建议你看看克隆功能的glibc包装器。