【问题标题】:How to find text relocations in .so file?如何在 .so 文件中查找文本重定位?
【发布时间】:2016-03-20 13:19:07
【问题描述】:

当我尝试在 Android 6 上运行我的 .so 文件时,我收到了这条消息:

Loading Native Audio Library...
03-20 15:07:55.182 19446 19446  : Cannot Load Native Library !!!
03-20 15:07:55.182 19446 19446  : java.lang.UnsatisfiedLinkError: dlopen failed: /data/app/com.myapp.android.sdk-1/lib/arm/myso.so: has text relocations

从消息中我可以了解到我的 .so 文件中有文本重定位。 使用 -fPIC 编译没有帮助,因为文本重定位位于我用来优化某些计算的汇编文件中。 如何知道文本重定位在源代码中的确切位置?

【问题讨论】:

  • 好吧,查看重定位表本身对于 readelf 或 objdump 之类的东西来说是微不足道的 - 您是在问如何将这些偏移量与源代码中的位置相关联吗?
  • @Notlikethat,我在问如何读取 GOT 表以及如何将偏移量关联回我的源代码。

标签: android-ndk arm shared-libraries ndk-build


【解决方案1】:

要找到文本重新定位的确切位置,您可以使用 scanelf -T

这里是关于如何修复二进制文件中文本重定位的 Gentoo 指南:https://wiki.gentoo.org/wiki/Hardened/Textrels_Guide

这是一个很长一段时间以来的警告,Android 链接器开始在 Marshmallow 中针对面向 sdk 版本 >= 22 的应用(适用于 arm/x86/mips 等 lp32 平台)强制执行此警告。而且从一开始就不存在对lp64(arm64/x86_64/mips64)的支持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多