我试图在一开始就从另一个进程分叉一个进程。为此,我尝试修改__libc_start_main
glibc(我使用的修改后的 glibc)中的函数并尝试将 fork 放在那里,但无法编译 glibc,因为每当我尝试这样做时都会出错。还有哪些其他选择,为什么插入叉子__libc_start_main
不起作用?
再次注意,我想以一种不需要修改程序的方式来做,即在 glibc 中修改是可以的,但不是程序。
在__libc_start_main
中,我尝试像这样分叉。
if (__builtin_expect (! not_first_call, 1))
{
struct pthread *self;
fork(); // <-- here
self = THREAD_SELF;
/* Store old info. */
unwind_buf.priv.data.prev = THREAD_GETMEM (self, cleanup_jmp_buf);
unwind_buf.priv.data.cleanup = THREAD_GETMEM (self, cleanup);
/* Store the new cleanup handler info. */
THREAD_SETMEM (self, cleanup_jmp_buf, &unwind_buf);
/* Run the program. */
result = main (argc, argv, __environ MAIN_AUXVEC_PARAM);
}
我得到的错误如下。
file '/build/sunrpc/xbootparam_prot.T' already exists and may be overwritten
make[2]: *** [build/sunrpc/xbootparam_prot.stmp] Error 1