2

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

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

4

1 回答 1

2

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

$ LD_DEBUG=help ls

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

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

于 2012-05-21T15:58:23.400 回答