Вы не получите ничего полезного из исходного кода ядра для fork
.Вашему коду не будет позволено делать то, что ядро делает независимо от того, с какими хитростями в библиотеке вы справляетесь.Это жесткая граница, которую нельзя нарушить без написания модуля ядра.
Все, что делает библиотечный код для fork
, это настраивает и выполняет специальную инструкцию, которая переключается в режим ядра, где код ядра fork
выполняет.Есть своего рода способ поместить эту специальную инструкцию в ваш собственный код.Это функция syscall
.Поскольку fork
не принимает аргументов, использовать эту функцию для системного вызова должно быть относительно легко.
Но я не рекомендую это делать.Я рекомендую вам сделать это вместо этого:
typedef int (*forkfunc_t)(void);
int fork(void)
{
forkfunc_t sysfork = (forkfunc_t)dlsym(RTLD_DEFAULT, "fork");
return sysfork();
}
По сути, независимо от того, какую хакерскую работу с общей библиотекой вы делаете, вы должны найти какой-то способ получения предыдущего значения функции fork
, прежде чем заменить его своим собственным.