比如说,我想修改mmap
。因此,我为此目的创建了一个新的共享对象文件,并使用 LD_PRELOAD 来使用它,而不是原始的 mmap
。但是,我需要引用一个变量,它是我的程序文件。我怎样才能做到这一点?我在某处读到过有关弱引用的内容。这是这样做的方法吗?我认为您不能使用 extern
因为您单独编译共享库而不是您的程序。对此有何建议?
其次,LD_PRELOAD
是否仅影响代码中 mmap
的使用,或者也影响例如从标准库中调用的 mmap
libc.so
您的代码使用什么?
最佳答案
使用LD_PRELOAD
将影响任何对必须动态定位的函数的调用,无论它是在您自己的代码中还是在您的代码加载的共享库中。您可以使用LD_DEBUG
来准确查看在哪里找到符号。看看:
$ LD_DEBUG=help ls
这将向您显示可用的调试选项。请注意,此处的 ls
可以是任何动态链接的可执行文件。
我不确定你问题的第一部分。您是否尝试过使用dlsym()
来查找变量?
关于c - LD_PRELOAD 和外部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10688478/