LD_PRELOAD和extern变量

时间:2012-05-21 15:52:32

标签: c linux gcc x86-64 glibc

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

其次,LD_PRELOAD是否仅影响代码中mmap的使用,或者也就是代码中使用的标准库mmap中调用的libc.so的使用情况?

1 个答案:

答案 0 :(得分:2)

使用LD_PRELOAD会影响对动态定位的任何调用,无论它是在您自己的代码中还是在您的代码加载的共享库中。您可以使用LD_DEBUG查看确切找到符号的位置。看看:

$ LD_DEBUG=help ls

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

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