[Android]鉴定为: 搞移植的

发布于 3 天前  5 次阅读


有时候出于各种需要,需要移值一些blobs

我们要确保

a. 底层编译库版本符合 比如gcc编译一个c程序 就要看libc库的版本 java程序可能还分java 8 java11 等等

如果是安卓 一般安卓大版本符合即可

1、注意selinux

selinux是个讨人厌的东西

要配置te规则允许 也要设置文件权限 以免禁止执行文件 禁止进程读取其他文件 或者禁止init的状态转换之类的,非常麻烦,可以从原厂的etc/selinux 下面查询selinux相关信息

文件权限一般在 file_contexts 之类的下面

权限配置有可能是cil文件, 具体转换可以使用我的github项目

当然需要小修改,github上只是省事99% 最后1% 还是要自己修改

https://github.com/u0-ani-nya/setools

2、 注意链接库

使用readelf -d 可执行文件 来读取依赖的运行库so文件

使用readelf -l 读取linker路径,如果linker找不到 那么库就会白复制

3、 如果移值失败

etc/init 下面 有一堆rc文件

如果要用的移值的什么功能, 移值之后运行异常, 有可能是少了什么

可以从init.rc 或者xxx.rc 等 找到具体都有什么

也可以在有root的设备 运行getprop | grep init.svc

作用是查看这个设备上运行了什么,从[running]里面大概率有这个服务运行需要什么的信息

4、etc/vintf

vintf差不多是个声明,里面存放aidl和hidl类型的声明

建议参考 https://blog.xzr.moe/archives/99/ 写的非常好

之后想起来什么继续更新

注: etc 指的是 system/etc system_ext/etc vendor/etc persist/etc 等目录

最后更新于 2025-01-23