Android内置可执行ELF文件
在Android系统源码中内置可执行的ELF文件,并通过cmd来实现调用。这里以Android9.0,手机设备Piexl一代为例。没有搭建编译环境的可以看这一篇Android系统编码编译。
一、环境准备
(1) Android系统源码编译环境
(2) C项目工程
二、概述
这里主要从两个方面来内置可执行的ELF文件
(1) 有源码内置可执行ELF文件
(2) 无源码内置可执行ELF文件
接下来将会来讲述如何实现ELF文件的内置,首先我们需要了解Android系统的目录
目录 | 描述 |
---|---|
system/bin | 存放的是可执行文件 |
system/xbin | 存放的是可执行文件 |
system/lib | 存放本地库(so) |
system/lib64 | 存放64位的本地库 (so) |
我们只要把编译好了的可执行的ELF文件存放在system/bin
或者system/xbin
目录下就行了
三、过程
(1)有源码内置可执行ELF文件
a. 在aosp/framework/base/cmds/
目录下创建新的目录,用于存放C项目工程
> cd aosp/framework/base/cmds/
> mkdir myelf
> cd myelf
> touch main.c
> vim main.c
main.c
#include <stdio.h>
int main(){
printf("this is myelf\n");
return 0;
}
b.在aosp/framework/base/cmds/myelf
目录下创建并编写Android.mk
文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := myelf
LOCAL_SRC_FILES := main.c
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES) #/system/xbin
LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable -code
include $(BUILD_EXECUTABLE) #编译可执行
c. 编译
> make -j32
d. 刷机
> ./fastboot flashall -w
e. 验证
> adb shell myelf
> this is myelf #成功执行
(2)无源码内置可执行ELF文件
a. 在aosp/framework/base/cmds/
目录下创建新的目录,用于存放已经编译好的ELF文件
> mkdir myelf #新建文件夹myelf
> cd myelf #进入到文件夹内
> ls #列出myelf下的文件
> myelf #这个文件是可执行的ELF文件
b.在aosp/framework/base/cmds/myelf
目录下创建并编写Android.mk
文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := myelf
LOCAL_SRC_FILES := myelf
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES) #/system/xbin
LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable -code
LOCAL_MODULE_CLASS := EXECUTABLES #可执行文件
include $(BUILD_PREBUILT) #预构建
c. 编译
> make -j32
d. 刷机
> ./fastboot flashall -w
e. 验证
> adb shell myelf
> this is myelf #成功执行
asjhan for Android reverse
标签:
framework
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效