He sobrecargado la llamada al sistema fork()
y he creado mi propia versión de fork()
usando RTLD_NEXT. Es decir, dlsym(RTLD_NEXT, fork)
. Esto afectará mi versión de tenedor. Después de esto quiero replicar la tarea de la llamada al sistema actual fork()
, es decir, crear el proceso hijo y devolver el pid, y algunas funcionalidades adicionales adicionales.Sobrecarga de la horquilla()
No soy capaz de encontrar la manera de hacerlo. Revisé el código fuente del kernel para fork()
(fork.c) y no pude entender mucho.
Hacer esto:
dlsym(RTLD_NEXT,fork);
int fork(void) {
int pid=_fork(); // Trying to call actual fork does not work
return pid;
}
¿Cómo puedo hacer eso? Aquí está el enlace al núcleo código fuente de tenedor: http://lxr.linux.no/linux+v2.6.32/kernel/fork.c#L10
Editar (retirado desde comentarios):
estoy trabajando en una fuga herramienta de detección, y esta herramienta detecta una doble liberación cuando un proceso hijo borra la memoria asignada por el padre. Para superar esto anularé fork()
, y cada vez que haya un fork()
, la tabla de asignación de memoria del padre se duplicará al niño.
¿Qué quiere decir con "does not work"? ¿Errores en tiempo de ejecución? ¿Errores del compilador? – Simone
@Simone: _fork(); // Error: _fork no fue declarado. Mi idea era hacer que golpeara la versión actual del kernel de la horquilla y no la mía. Espero que quede claro ahora. – kingsmasher1
¿Qué es exactamente lo que quieres lograr al hacer esto? ¿Cuál es tu objetivo final? – Omnifarious