Suppose I want to completely take over the open() system call, maybe to wrap the actual syscall and perform some logging. One way to do this is to use LD_PRELOAD to load a (user-made) shared object library that takes over the open() entry point.
The user-made open() routine then obtain the pointer to the glibc function open() by dlsym()ing it, and calling it.
The solution proposed above is a dynamic solution, however. Suppose I want to link my own open() wrapper statically. How would I do it ? I guess the mechanism is the same, but I also guess there will be a symbol clash between the user-defined open() and the libc open().
Please share any other techniques to achieve the same goal.