说,我想修改mmap
。所以我为此创建了一个新的共享对象文件,并使用LD_PRELOAD来代替原始mmap
。但是,我需要引用一个变量,它是我的程序文件。我怎样才能做到这一点?我在某处读到了弱引用。这是那样做的方式。我不认为你可以使用extern
因为你编译共享库而不是你的程序。对此有何建议?
其次,LD_PRELOAD
是否仅影响代码中mmap
的使用,或者也就是代码中使用的标准库mmap
中调用的libc.so
的使用情况?
答案 0 :(得分:2)
使用LD_PRELOAD
会影响对动态定位的任何调用,无论它是在您自己的代码中还是在您的代码加载的共享库中。您可以使用LD_DEBUG
查看确切找到符号的位置。看看:
$ LD_DEBUG=help ls
这将显示可用的调试选项。请注意,此处的ls
可以是任何动态链接的可执行文件。
我不确定你问题的第一部分。您是否尝试使用dlsym()
查找变量?