c - LD_PRELOAD 和外部变量

标签 c linux gcc x86-64 glibc

比如说,我想修改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/

相关文章:

c - 如何将 typedef 结构传递给函数?

c++ - 下载文件 c++ linux GCC

linux - GCC 在 Mac OS X 上编译程序,但在 Ubuntu 上不编译程序

c - -finline-functions 破坏了我的代码

c++ - 使用G++编译C++程序时出错

c++ - 一个/C++项目的基本结构(头文件和cpp文件)

c - 将数组 char 转换为数组 Short 时的奇怪行为

java - Grails 在新服务器上启动时卡住

c - c中链表期间的段错误

c++ - 在 Qt 中以 root 身份执行 Linux 命令