基于Android arm64 可执行程序的编译运行
来源:互联网 发布:在美国程序员的工资 编辑:程序博客网 时间:2024/04/29 08:36
Android默认编译的应用程序动态链接的一般都是PIE,前文“基于Android arm64 Linux got 调试”,每次调试都要查看加载地址,于是就想能否编译生成非PIE的应用程序。
/opt/android-6.0.1_r9/external/hello$ mmm ./ showcommands 2>&1 | tee build.log
查看build.log
prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-g++ -pie -nostdlib -Bdynamic -Wl,-dynamic-linker,/system/bin/linker64 -Wl,--gc-sections -Wl,-z,nocopyreloc -Lout/target/product/generic_arm64/obj/lib -Wl,-rpath-link=out/target/product/generic_arm64/obj/lib out/target/product/generic_arm64/obj/lib/crtbegin_dynamic.o out/target/product/generic_arm64/obj/EXECUTABLES/hello_intermediates/hello.o -Wl,--whole-archive -Wl,--no-whole-archive out/target/product/generic_arm64/obj/STATIC_LIBRARIES/libcompiler_rt-extras_intermediates/libcompiler_rt-extras.a prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/../lib/gcc/aarch64-linux-android/4.9.x-google/../../../../aarch64-linux-android/lib/../lib64/libatomic.a prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/../lib/gcc/aarch64-linux-android/4.9.x-google/libgcc.a -lutils -lcutils -lc++ -ldl -lc -lm -o out/target/product/generic_arm64/obj/EXECUTABLES/hello_intermediates/LINKED/hello -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--build-id=md5 -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,-maarch64linux -Wl,--hash-style=gnu -Wl,--fix-cortex-a53-843419 -Wl,--allow-shlib-undefined -Wl,--no-undefined out/target/product/generic_arm64/obj/lib/crtend_android.o
果然有-pie参数。在android编译根路径输入去除-pie参数的命令:
/opt/android-6.0.1_r9$ prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-g++ -nostdlib -Bdynamic -Wl,-dynamic-linker,/system/bin/linker64 -Wl,--gc-sections -Wl,-z,nocopyreloc -Lout/target/product/generic_arm64/obj/lib -Wl,-rpath-link=out/target/product/generic_arm64/obj/lib out/target/product/generic_arm64/obj/lib/crtbegin_dynamic.o out/target/product/generic_arm64/obj/EXECUTABLES/hello_intermediates/hello.o -Wl,--whole-archive -Wl,--no-whole-archive out/target/product/generic_arm64/obj/STATIC_LIBRARIES/libcompiler_rt-extras_intermediates/libcompiler_rt-extras.a prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/../lib/gcc/aarch64-linux-android/4.9.x-google/../../../../aarch64-linux-android/lib/../lib64/libatomic.a prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/../lib/gcc/aarch64-linux-android/4.9.x-google/libgcc.a -lutils -lcutils -lc++ -ldl -lc -lm -o out/target/product/generic_arm64/obj/EXECUTABLES/hello_intermediates/LINKED/hello -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--build-id=md5 -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,-maarch64linux -Wl,--hash-style=gnu -Wl,--fix-cortex-a53-843419 -Wl,--allow-shlib-undefined -Wl,--no-undefined out/target/product/generic_arm64/obj/lib/crtend_android.o
查看编译结果
模拟器运行试试:
够狠,不支持。反正只是调试,不做产品。看看改改链接源程序行不行。
修改bionic/linker/linker.cpp
#if 0 if (elf_hdr->e_type != ET_DYN) { __libc_format_fd(2, "error: only position independent executables (PIE) are supported.\n"); exit(EXIT_FAILURE); }#else if (elf_hdr->e_type != ET_DYN) { __libc_format_fd(2, "warnning: only position independent executables (PIE) are supported. Just ignore temporarily.\n"); }#endif
编译重新运行:
0 0
- 基于Android arm64 可执行程序的编译运行
- NDK编译Android上运行的C可执行程序
- 编译一个可以在Android系统上运行的可执行程序
- 交叉编译环境学习(编译Android上的可执行程序)
- 在Android上运行C语言编写的可执行程序
- 在Android上运行C语言编写的可执行程序
- NDK编译Android字符界面的可执行程序
- NDK编译Android字符界面的可执行程序
- NDK编译Android字符界面的可执行程序
- NDK编译Android字符界面的可执行程序
- 编译运行基于openssl库的程序
- 高通snapdragon平台下编译生成运行Android可执行程序小白教程
- Android-------C语言可执行程序编译实例
- Android-------C语言可执行程序编译实例
- gcc手动编译android可执行程序
- Android-------C语言可执行程序编译实例
- 如何编译可以在arm平台上运行的可执行程序?
- centos上编译的可执行程序在suse上无法运行
- javascript null
- HYSBZ 1588 营业额统计
- 使用ssh-keygen和ssh-copy-id三步实现SSH无密码登录
- LeetCode Substring with Concatenation of All Words
- 简单说说服务治理
- 基于Android arm64 可执行程序的编译运行
- 【Linux运维入门】Linux环境编译安装、配置Mysql
- 计算机概述
- jquery省市区三级联动插件CitySelect教程
- JAVA多线程-线程间通信(二)-生产者/消费者模式实现
- 习题 6-4 UVA 439 Knight Moves 骑士的移动
- window配置React+Native 安卓开发环境
- nginx学习十 ngx_cycle_t 、ngx_connection_t 和ngx_listening_t
- git常用命令总结