我无法理解基本拦截fork系统调用的以下代码的工作
pid_t fork(void)
{
pid_t result;
if (!actual_fork) {
const int saved_errno = errno;
*(void **)&actual_fork = dlsym(RTLD_NEXT, "fork");
if (!actual_fork) {
errno = EAGAIN;
return (pid_t)-1;
}
errno = saved_errno;
}
result = (*actual_fork)();
if (!result && commfd != -1) {
struct message msg;
notify(TYPE_FORK, &msg, sizeof msg);
}
printf("\n%d",result);
fflush(stdout);
return result;
}
使用LD_PRELOAD导出以下截获的代码时,任何调用嵌套fork的进程都会抛出 Segmentation fault