WeTest 导读
近期测试反馈一个问题,在旧版本微视基础上覆盖安装新版本的微视APP,首次打开拍摄页录制视频合成时高概率出现crash。
那么我们直奔主题,看看日志:

另外复现的日志中还出现如下信息:
'/data/data/com.tencent.weishi/appresArchiveExtra/res1bodydetect/bodydetect/libxnet.so: strtab out of bounds error

后经过测试,发现覆盖安装后首次使用美体功能也会出现crash,日志如下:

由于出现问题的场景都是覆盖安装首次使用,并且涉及到人体检测相关的so,似乎存在某种共同的原因。
因此Abort异常比起fault addr类问题更容易分析,先从前面Linker出现Abort异常的位置开始着手。
Linker是so链接和加载的关键,属于系统可执行文件,因此分析起来比较棘手。好在手上正好有一台刚刷完自己编译的Android AOSP的Pixel,做一些实验变得更轻松了。
出现异常的Linker代码linker_soinfo.cpp如下:
const char* soinfo::get_string(ElfW(Word) index) const {
 if (has_min_version(1) && (index >= strtab_size_)) {
   async_safe_fatal("%s: strtab out of bounds error; STRSZ=%zd, name=%d",
       get_realpath(), strtab_size_, index);
 }
                        
                        
                    