c – 重载fork()

前端之家收集整理的这篇文章主要介绍了c – 重载fork()前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经重载了fork()系统调用并使用RTLD_NEXT创建了我自己的fork()版本.也就是说,dlsym(RTLD_NEXT,fork).这将打到我的版本的fork.在此之后,我想复制实际fork()系统调用的任务,即创建子进程并返回pid,以及一些更多的附加功能.

我无法弄清楚如何做到这一点.我检查了fork()(fork.c)的内核源代码并且无法弄清楚.

这样做:

dlsym(RTLD_NEXT,fork);  
int fork(void) {
    int pid=_fork(); // Trying to call actual fork does not work
    return pid;
}

我怎样才能做到这一点?这是fork:http://lxr.linux.no/linux+v2.6.32/kernel/fork.c#L10的内核源代码链接

编辑(从评论提取):

我正在研究泄漏检测工具,当子进程删除父进程分配的内存时,此工具会检测到double free.为了解决这个问题,我将覆盖fork(),并且只要有fork(),父进程的内存分配表就会被复制到子进程中.

解决方法

在包含< sys / syscall.h>之后,您应该能够使用syscall(SYS_fork)调用实际的fork.请参阅syscall(2).

猜你在找的C&C++相关文章