LD_PRELOAD no es necesariamente una buena manera de intercalar llamadas al sistema, porque a) solo le permite interceptar llamadas de la biblioteca yb) solo le permite interceptar llamadas de la biblioteca. ;)
A) Aunque, en general, las llamadas al sistema están envueltas en su sistema, nadie le impide llamar al sistema usted mismo, por ejemplo, configurando el contenido del registro correcto y emitiendo INT 0x80 en un sistema x86. Si el programa que le interesa lo hace, nunca los detectará con la interposición de libc basada en LD_PRELOAD.
B) En general, la mayoría de los programas utilizan la biblioteca compartida en su sistema para realizar llamadas al sistema, a veces las aplicaciones están vinculadas estáticamente, lo que significa que el código libC es parte de la aplicación y no proviene de la biblioteca compartida. En tales casos, LD_PRELOAD tampoco ayuda.
Un comentario ya sugerido para usar strace/ltrace - mi consejo general sería echar un vistazo a ptrace() que ambas herramientas usan y que deberían darle lo que quiere sin la necesidad de modificar el kernel.
Las llamadas al sistema son una cosa irrelevante, las llamadas a la biblioteca son otra. Es posible que desee ver el código fuente de las herramientas 'strace' amd' ltrace'. –
@ n.m. un puntero útil. no lo pienso –
Está mezclando cosas: la correspondencia entre las llamadas al sistema y los puntos de entrada API documentados (abrir, cerrar, etc.) no es 1: 1. – zvrba