【发布时间】:2011-04-09 10:29:33
【问题描述】:
假设我想完全接管 open() 系统调用,也许是为了包装实际的系统调用并执行一些日志记录。 One way to do this is to use LD_PRELOAD 加载接管 open() 入口点的(用户制作的)共享对象库。
然后用户创建的 open() 例程通过 dlsym() 获取指向 glibc 函数 open() 的指针并调用它。
然而,上面提出的解决方案是一个动态解决方案。假设我想静态链接我自己的 open() 包装器。我该怎么做?我猜机制是一样的,但我也猜想用户定义的open()和libc的open()之间会有符号冲突。
请分享任何其他实现相同目标的技术。
【问题讨论】:
-
在代码中添加一个包装函数/宏怎么样?
-
@Seamus :我不喜欢使用宏。我真的没有问题。我只是要求增加 SO 知识并学习一些新技巧。
标签: c linux system-calls libc