【发布时间】:2013-06-25 18:15:55
【问题描述】:
因此,我们从一家供应商那里共享了库,该供应商不会在 Linux 或 Android 上以静态存档 .a 格式提供他们的库(但在其他平台上提供),因为他们更改构建过程会很不方便。问题是需要包装线程创建、malloc 和大量其他 api 来解决平台非标准 libc 中的错误。我们使用 LD 执行此操作,使用“--wrap”命令将函数重定向到我们的包装。不幸的是,对于已编译的 .so,我们无法重新链接它。无论如何将 .so 转换为静态存档并重新链接它,甚至重写链接表以将这些调用重定向到我们的包装?
除了拆卸、更改库和重新组装之外,我想不出任何方法可以轻松地做到这一点。
【问题讨论】:
-
LD_PRELOAD技巧有帮助吗? -
因为在android上,你是Zygote进程的fork,你不能使用LD_PRELOAD。您可以在子进程上执行 LD_PRELOAD,但不能在主进程上执行此操作。我希望我能。