Supongamos que deseo asumir por completo la llamada al sistema open(), tal vez para ajustar la llamada al sistema real y realizar algunos registros. One way to do this is to use LD_PRELOAD para cargar una biblioteca de objetos compartidos (creada por el usuario) que toma el punto de entrada open().¿Cómo puedo volver a implementar (o ajustar) una función syscall en Linux?
La rutina open() realizada por el usuario obtiene el puntero a la función glibc open()
por dlsym()
y la llama.
La solución propuesta anteriormente es una solución dinámica, sin embargo. Supongamos que quiero vincular mi propio contenedor open()
estáticamente. ¿Cómo lo haría? Supongo que el mecanismo es el mismo, pero también creo que habrá un choque de símbolos entre el open()
definido por el usuario y el open()
libc.
Comparta cualquier otra técnica para lograr el mismo objetivo.
¿Qué le parece si simplemente pega una función envoltura/macro en su código? –
@Seamus: Prefiero no usar macros. Realmente no tengo un problema. Solo estoy pidiendo aumentar el conocimiento SO y aprender algún truco nuevo. –