Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
说,我想修改mmap. 因此,我为此创建了一个新的共享对象文件,并使用 LD_PRELOAD 来代替原来的mmap. 但是,我需要引用一个变量,即我的程序文件。我怎样才能做到这一点?我在某处读到了关于弱引用的信息。这就是这样做的方法。我不认为你可以使用extern,因为你编译共享库而不是你的程序。对此有何建议?
mmap
extern
其次,是否LD_PRELOAD只影响mmap您的代码中的使用,或者例如mmap从您的代码使用的标准库libc.so中调用?
LD_PRELOAD
libc.so
使用LD_PRELOAD将影响对必须动态定位的函数的任何调用,无论它是在您自己的代码中还是在您的代码加载的共享库中。您可以使用它LD_DEBUG来查看事物在哪里找到符号。看一眼:
LD_DEBUG
$ LD_DEBUG=help ls
这将向您显示可用的调试选项。请注意,ls这里可以是任何动态链接的可执行文件。
ls
我不确定您问题的第一部分是否完全确定。您是否尝试过使用dlsym()来查找变量?
dlsym()