本文基于Android 7.1,不过因为从BSP拿到的版本略有区别,所以本文提到的源码未必与读者找到的源码完全一致。本文在提供源码片断时,将按照 <源码相对android工程的路径>:<行号> <类名> <函数名> 的方式,如果行号对不上,请参考类名和函数名来找到对应的源码。
本节介绍Dex Code的格式。DexCode是Dex虚拟机的核心。
CodeItem
CodeItem结构的内容
Method的内容都放在CodeItem结构中,它的定义是这样的
art/runtime/dex_file.h:281
// Raw code_item.
struct CodeItem {
uint16_t registers_size_; // the number of registers used by this code
// (locals + parameters)
uint16_t ins_size_; // the number of words of incoming arguments to the method
// that this code is for
uint16_t outs_size_; // the number of words of outgoing argument space required
// by this code for meth

本文深入解析Android Dex文件的CodeItem结构,包括insns_的内容、TryCatch机制(TryItem和Handler)以及Switch(packed switch和sparse switch)的实现。内容涉及Dex虚拟机、函数调用、调试信息和异常处理。
最低0.47元/天 解锁文章
1639

被折叠的 条评论
为什么被折叠?



