[英]Clone() system call in linux
当我通过传递0作为stack_start来调用克隆系统调用时会发生什么? 根据克隆的手册页,它应该返回-EINVAL
,但是当我这样做时,它显示SIGSEGV (11)
错误。
clone(func,NULL,0,args);
应该返回-EINVAL,但是它与SIGSEGV
失败
根据linux内核,有这样的调用链:
sys_clone(... stack_start ...) -> do_fork
do_fork(... stack_start ...) -> copy_process
copy_process(... stack_start ...) -> copy_thread
X86_32上的copy_thread(... stack_start ...)或X86_64上的copy_thread(... stack_start ...)
查看copy_thread
会导致我假设该函数不检查stack_start
正确性(代码中的sp参数),因此在克隆后,我们将执行一个任务,该任务具有无效的堆栈指针,并且第一个引用位于零地址处会导致SIGSEGV
。
我建议您也查看克隆功能的glibc包装器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.