作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我构建了一个 linux 共享对象,我将其注入(inject)第 3 方程序以使用 LD_PRELOAD 拦截一些动态函数调用。
第 3 方程序使用位于某个路径的 SO“libabc.so”。我注入(inject)的 SO 使用另一个 SO,也称为“libabc.so”,位于另一个路径(本质上相同,但代码略有差异)。
我现在的问题是,对出现在两个 libabc.so 中的函数“def”的调用总是由第一个解决。 (大概是因为它先加载了?!)我怎样才能用第二个 libabc.so 解决它们?
非常感谢!
最佳答案
除非自从我以前这样做以来发生了什么变化,否则您将需要 dlopen()您要传递调用的库并手动调用该函数,例如;
handle = dlopen("/path/to/libabc.so", RTLD_LAZY);
otherDef = dlsym(handle, "def");
orderDef(parameter);
在 LinuxJournal 有一个完整的例子,说明如何做这件事。 .
关于Linux 库代码注入(inject)和对 SO 中同名函数的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9546775/
我是一名优秀的程序员,十分优秀!