Android NDK,独立构建,错误不可执行:magic 7F45 和/或不可执行:magic 4c01
Posted
技术标签:
【中文标题】Android NDK,独立构建,错误不可执行:magic 7F45 和/或不可执行:magic 4c01【英文标题】:Android NDK, standalone build , Error not executable: magic 7F45 and/or not executable: magic 4c01 【发布时间】:2016-06-17 09:49:03 【问题描述】:我正在尝试编译“su”超级用户、实用程序的修改版本,所以我去了 git 上的 android5.0 源代码,并得到了“su.c”文件。
我的实际设备/硬件是正在运行的乐视 x500 手机:
Android 5.0.2 ,SDK 21 CPU 架构 AArch64 处理器版本 2 指令集arm64-v8a。我是关于硬件数据的,因为我已经查看了制造商网站并使用了第 3 方应用程序来获取软件/硬件信息。
使用 cygwin shell:
$ sh make-standalone-toolchain.sh --platform=android-21 --install-dir=/cygdrive /c/users/anaim/ndk-standalone_arm64 --arch=arm64 --toolchain=aarch64-linux-andr oid-4.9 --ndk-dir=/cygdrive/c/Users/anaim/android-ndk-r10e --system=windows-x86 _64
结果:
正在复制预构建的二进制文件... 正在复制 sysroot 头文件和库... 复制 c++ 运行时标头和库... 将文件复制到:/cygdrive/c/users/anaim/ndk-standalone_arm64 打扫干净... 完毕。命令:
然后我编译了我修改后的 su.c:
$ /cygdrive/c/Users/anaim/ndk-standalone_arm64/bin/aarch64-linux-android-gcc -c su.c -o su -I/cygdrive/c/Users/anaim/android-ndk-r10e/platforms/android-21/arc h-arm/用户/包含
然后我将 su 二进制文件推送到设备路径 /local/data/tmp 并针对 su 发出 chmod 777 ,但是当我想执行时得到了这个错误:
$ /data/local/tmp/su /system/bin/sh:/data/local/tmp/su:不可执行:magic 7F45
我尝试使用另一个带有 --arch 标志的工具链来设置 --arch=arm 但这给了我一个稍微不同的错误 /data/local/tmp/su: not executable:魔法 4c01.
为什么独立工具链 arm 和 arm64(这应该是正确的) 无法为设备创建写入二进制文件?
【问题讨论】:
【参考方案1】:gcc -c
将创建一个目标文件,而不是一个可执行文件。从命令行中删除 -c
参数。
【讨论】:
@pelay,感谢错误似乎消失了,这是我忽略的愚蠢的复制和粘贴。现在我得到“仅支持与位置无关的可执行文件 (PIE)”,有什么建议吗? 我通过在编译命令中添加 -shared -fpic 标志修复了“仅支持与位置无关的可执行文件 (PIE)”,但是当我运行 su 二进制文件时,我得到“分段错误”?? ? 你不想要-shared
,它会创建一个库而不是可执行文件(技术上也可执行,但符号未解析)。删除它,并将-l library
添加到您的编译器标志中,直到不再有未解析的符号。以上是关于Android NDK,独立构建,错误不可执行:magic 7F45 和/或不可执行:magic 4c01的主要内容,如果未能解决你的问题,请参考以下文章