我已经重载了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).