android - 在 elf 中重写链接表

标签 android c ld elf

因此,我们从一家供应商那里获得了共享库,他们不会在 Linux 或 Android 上以静态存档 .a 格式交付他们的库(但在其他平台上可以),因为他们不方便更改他们的构建过程。问题是需要包装线程创建、malloc 和大量其他 api,以解决平台非标准 libc 中的错误。我们使用 LD 使用“--wrap”命令将函数重定向到我们的包装。不幸的是,对于已编译的 .so,我们无法重新链接它。是否有将 .so 转换为静态存档并重新链接它或什至重写链接表以将这些调用重定向到我们的包装的方法?

除了拆卸、更改库和重新组装之外,我想不出有什么方法可以轻松地做到这一点。

最佳答案

Is there anyway of turning the .so into a static archive

没有。

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

because on android, you are fork of the Zygote process for your startup, you can't use LD_PRELOAD. You can LD_PRELOAD on subprocesses but you can't do it on your main process.

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

关于android - 在 elf 中重写链接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17304634/

相关文章:

Android SearchView.onQueryTextSubmit(字符串查询)

c - 如何在 C 中计算整数数组元素(例如基于 char 的 strlen())?

c - 汇编和调用栈

c++ - gcc -/usr/bin/ld 错误 : cannot find <library> in/usr/local/lib though ldconfig list it, 并将路径添加到 ld.so.conf

linux - 正确使用软件包的 LD_LIBRARY_PATH 或 ldconfig

java - 更改窗口标题背景样式

android - 如何确定我是否已使用谷歌签名按钮登录或注册我的 Android 应用程序

java - 在没有 Activity 的情况下调用 SharedPreferences、Intent 和 Retrofit

c - 如何使用linux c计算bash中光标前的字母?

c++ - 安卓NDK :undefined reference to ' '