【问题标题】:LD_PRELOAD and extern variablesLD_PRELOAD 和外部变量
【发布时间】:2012-05-28 03:27:26
【问题描述】:

说,我要修改mmap。因此,我为此创建了一个新的共享对象文件,并使用 LD_PRELOAD 代替原来的mmap 来使用它。但是,我需要引用一个变量,即我的程序文件。我怎样才能做到这一点?我在某处读到了关于弱引用的信息。这就是这样做的方法。我不认为你可以使用extern,因为你编译共享库而不是你的程序。对此有何建议?

其次,LD_PRELOAD 是否仅影响代码中 mmap 的使用,或者例如从您的代码使用的标准库 libc.so 中调用的 mmap

【问题讨论】:

  • 你的程序有源码吗?如果是,为什么要使用LD_PRELOAD 而不是覆盖mmap()

标签: c linux gcc x86-64 glibc


【解决方案1】:

使用LD_PRELOAD 将影响对必须动态定位的函数的任何调用,无论它是在您自己的代码中还是在您的代码加载的共享库中。您可以使用LD_DEBUG 来查看事物在哪里找到符号。看看:

$ LD_DEBUG=help ls

这将向您显示可用的调试选项。请注意,此处的ls 可以是任何动态链接的可执行文件。

我不确定您问题的第一部分是否完全确定。您是否尝试过使用dlsym() 来查找变量?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多