在运行时更改库加载顺序(如LD_PRELOAD但在执行期间)

前端之家收集整理的这篇文章主要介绍了在运行时更改库加载顺序(如LD_PRELOAD但在执行期间)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何在运行时更改函数加载的库?

例如,假设我想用新的东西替换标准的printf函数,我可以编写自己的版本并将其编译成共享库,然后在运行可执行文件之前将“LD_PRELOAD = / my / library.so”放入环境中.

但是,让我们说,我想改变程序本身内部的联系.当然那一定是可能的……对吗?

编辑
不,以下不起作用(但如果你能告诉我如何使它工作,那就足够了).

void* mylib = dlopen("/path/to/library.so",RTLD_NOW);
printf = dlsym(mylib,"printf");

解决方法

AFAIK,这是不可能的.一般规则是,如果两个库中出现相同的符号,ld.so将支持首先加载的库. LD_PRELOAD的工作原理是确保在任何隐式加载的库之前加载指定的库.

因此,一旦执行开始,所有隐式加载的库都将被加载,因此在它们之前加载库为时已晚.

原文链接:https://www.f2er.com/c/119073.html

猜你在找的C&C++相关文章