首页
社区
课程
招聘
[求助]dex内存加载的问题
发表于: 2016-5-27 09:01 5117

[求助]dex内存加载的问题

2016-5-27 09:01
5117
最近研究了下art环境下, dex内存加载的办法, 遇到了些问题, 现在贴出来, 希望哪位大拿能帮助解惑下。 

加载思路:
第一步调用libart.so内的:

MemMap* MapAnonymous(const char* ashmem_name, byte* addr, size_t byte_count, int prot,bool low_4gb, std::string* error_msg)

(构造一个MemMap, 这个的目的就是, 把dex加载到内存里)

第2步调用libart.so内的:

DexFile* DexFile::OpenMemory(const std::string& location,uint32_t location_checksum,MemMap* mem_map,std::string* error_msg)

(构造一个DexFile, 其实这个函数就是一个DexFile构造函数, 没有其它功能)

通过上一步获得了一个DexFile指针, 直接传递给java层面。 就是对应的DexFile  java类的mCookie。

第3步使用: java 代码, 直接反射使用defineClassNative这个函数, 获取一个类对象。

问题来了: 大部分类都可以获取, 但是如果a类继承了b类, 而这时候b类没有初始化, 就加载a类, 就会出现b类找不到的错误

由于我对安卓代码不是很熟悉, 不太理解, art下class是如何加载的, 以我目前的理解, 我的
加载过程跟系统没有太大区别了, 难道defineClassNative默认没有处理这种类和类之间的相互
依赖关系?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 4
活跃值: (457)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
请问楼主解决问题了嘛?能共享下嘛,谢谢
2016-11-15 12:05
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼主请问下MapAnonymous  怎么调用能不能帮忙告诉下,我这个都调用失败一直返回空
2017-11-27 16:37
0
游客
登录 | 注册 方可回帖
返回
//