主要观点总结
本文介绍了在Android 15系统中适配16kb页大小的关键点和实战例子,包括so本身需要进行16kb边界对齐和固定编码4kb在部分系统调用异常的处理。通过本文,读者能够了解如何适配Android15的16kb页大小,并提供了相关工具和推荐阅读。
关键观点总结
关键观点1: so本身需要进行16kb边界对齐
如果so没有进行16kb边界对齐,在Android 15环境中会出现java.lang.UnsatisfiedLinkError错误。可以通过官方提供的脚本分析so是否对齐,如果不对齐,需要重新编译so并进行16kb对齐。
关键观点2: 固定编码4kb在部分系统调用异常的处理
虽然开启了16kb对齐,但并不是所有写死4096的地方都有问题,关键在于系统调用的特定限制。需要关注具体的系统调用是否支持,避免一刀切的处理方式。
关键观点3: 适配实战例子
以shadowhook为例,介绍了如何适配Android15的16kb pagesize。通过修改相关代码,以适应新的页大小,避免了MProtect系统调用失败导致的Crash。
关键观点4: 总结
总结了适配Android15的16kb页大小的注意事项和关键点,包括互相独立的so 16kb与固定编码4kb在部分系统调用异常的问题,以及查看是否硬编码pagesize时需要注意的其他进制数字。最后推荐了一个相关的网站和阅读资源。
文章预览
本文作者 作者: Pika 链接: https://juejin.cn/post/7395396352182583306 本文由作者授权发布。 通过本文,你将会了解到如何适配Android15中16kb页大小,同时我们也有一个实战例子,通过一个真实的例子:shadowhook的mprotect适配,让大家快速上手。希望这篇文章能让读者少走弯路~ Android 15 PageSize 大更新 Android 15已经迎来beta了,其中有一个更新让开发者们必须要注意,就是google决定在Android15上可以配置16kb的pagesize。(负责适配的厂商们,是可以选择开启与不开启16kb对齐适配的) 当然,作为开发者,我们还是要尽快适配,避免后续开启16kb对齐后产生Crash。PageSize的使用在Android Native开发比较多,之前的pagesize为4kb,在Android15后扩充至16kb。这也就意味着,CPU高速缓存或者内存缓存等以页为单位的核心驱动能够进一步提高速度(其实就是页大了能够命中的同一页缓存
………………………………