入门Android上动态链接器的实现机制
背景知识
编译过程
一个c/c++源文件经过预处理,编译和汇编处理,就会生成一份目标文件(object file)。
静态链接器根据配置把多个目标文件(和库文件)“合并”打包后就会生成一个可执行文件或库文件。
烂笔头,穷开心😊
本文介绍Android上定位native代码野指针/数组越界/栈踩踏的终极武器—-Address Sanitizer(asan)和Hardware assisted Address Sanitizer (hwasan)的基本实现原理。
记录一下这个问题的分析过程,主要是分享下Eclipse MAT的使用技巧 :-)
在长时间的稳定性测试后,经常遇到下面2类错误导致的重启,9.0上遇到的比较多的是这个java层报错:
1 | java.lang.AssertionError: Binder ProxyMap has too many entries: 20440 (total), 20272 (uncleared), 20176 (uncleared after GC). BinderProxy leak? |
而8.0上报的都是下面这个global reference overflow的NE问题:
1 | pid: 1505, tid: 2994, name: Binder:1505_B >>> system_server <<< |
本文介绍Android PackageManagerService对应用权限的管理
Instant App中文翻译即“免安装应用”,当点击一个链接时,类似6.0上引入的App Links功能,但更加强大的是,即便用户还没有安装对应的应,也可以直接打相应的应用,从而可以无缝体验原生应用。
Android 8.0在odex的基础上又引入了vdex机制,目的是为了降低dex2oat时间。
因为当系统ota后,用户自己安装的应用是不会发生任何变化的,但framework代码已经发生了变化,
所以就需要重新对这些应用也做dex2oat,所以如果有vdex的话,就可以省去重新校验apk里dex文件合法性的过程,节省一部分时间,所以本文分析下vdex的实现机制。
文件格式 | 用途 |
---|---|
.dex | 存储java字节码 |
.odex/.oat | optimized dex,ELF格式 |
.vdex | verified dex,包含 raw dex +(quicken info) |
.art | image文件,存储热点方法string, method, types等 |