【问题标题】:Rewrite link table in elf在elf中重写链接表
【发布时间】: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,但不能在主进程上执行此操作。我希望我能。

标签: android c ld elf


【解决方案1】:

有没有办法把 .so 变成静态存档

没有。

LD_PRELOAD 似乎是实现您想要的最简单的方法。

因为在android上,你是Zygote进程的fork,你不能使用LD_PRELOAD。您可以在子进程上执行 LD_PRELOAD,但不能在主进程上执行此操作。

所以在你的“启动”过程中,修改环境和execve真正的程序。问题解决了吗?

【讨论】:

    猜你喜欢
    • 2020-05-08
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多