什么是“未能映射从共享对象的区段:操作不允许”可能的原因,以及如何调试?(What are poss

2019-08-03 01:48发布

我有两个可执行文件,两个交叉编译在Android上运行。 我在同一个目录都放在设备上。 我已经把所有的共享库,它们依赖于同一个目录,包括LD-linux.so.3。 我通过运行可执行文件:

LD-linux.so.3 --library路径/路径/到/库executable_name

同时作为任何用户运行时的工作在旧版Android的。 在Android的最新版本,两者的工作,如果以root身份运行。 只有一个为任何用户运行时,适用于Android的最新版本。 相反,它提供了:

未能从共享对象映射段:不允许executable_name操作

我怎样才能找出哪些是不会运行的可执行文件有什么不同?

我看了很多网上和得到这个错误,无论是多数人:

A)不具有执行权限,他们依赖于库或可执行文件本身的一个。

要么

B)正试图从安装作为NOEXEC目录中运行。

这两个似乎不如此。 它可以找到所有的图书馆,我可以通过自身加载任何库,看看有什么其他的东西它是依赖于被解决。 另外,我可以运行所需目录的基本脚本。

Android的新版本,果冻豆,是不同的Linux内核版本,我不知道这是否是相关的。

什么给? 如何调试?

Answer 1:

权限问题。 需要挂载/ tmp中。 对我来说,下面的命令作品(Centos的7):

须藤安装/ TMP -o重新装入,EXEC



Answer 2:

我在不同的上下文有这个错误。 出于某种原因,它会导致尝试使用/ tmp文件夹时出错。

为了简单地解决这个问题我:

mkdir tmp
export TMPDIR=`pwd`/tmp


Answer 3:

这个问题是与可执行文件是如何编译。 他们需要与适当的支持较新的ARM器件交叉编译器来编译。 编译器我用生成的可执行文件,将只在手臂设备的子集工作。 这个问题是不是与不同的Android版本。



Answer 4:

SELinux的默认情况下,在Android 4.3启用,但是它被认为是“许可” [0]。 也许你的手机供应商增加了更多的限制性规定。

[0] https://source.android.com/devices/tech/security/se-linux.html



文章来源: What are possible causes of “failed to map segment from shared object: operation not permitted”, and how to debug?