Я перегрузил системный вызов fork()
и создал свою собственную версию fork()
с использованием RTLD_NEXT. То есть, dlsym(RTLD_NEXT, 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;
}
Как я могу это сделать? Вот ссылка на ядро исходного кода для вилки: http://lxr.linux.no/linux+v2.6.32/kernel/fork.c#L10
Edit (вытянуто в от комментариев):
Я работаю над утечкой обнаружением инструмента, и этот инструмент обнаруживает двойной свободным когда дочерний процесс удаляет память, выделенную родителем. Чтобы преодолеть это, я переопределяю fork()
, и всякий раз, когда есть fork()
, таблица распределения памяти родителя будет дублироваться с дочерним элементом.
Что вы подразумеваете под "не работает"? Ошибки времени выполнения? Ошибки компилятора? – Simone
@ Симоне: _fork(); // Ошибка: _fork не был объявлен. Моя идея состояла в том, чтобы поразить фактическую версию ядра вилки, а не мою. Надеюсь, теперь это ясно. – kingsmasher1
Что именно вы хотите сделать, выполнив это? Какова ваша конечная цель? – Omnifarious