首页
社区
课程
招聘
[讨论]Android5.0.1中加载dex时是如何调用dex2oat的
发表于: 2016-4-19 14:10 8387

[讨论]Android5.0.1中加载dex时是如何调用dex2oat的

2016-4-19 14:10
8387
rt,根据看android源码,应该是DexClassLoader在加载dex文件的时候fork了一个新进程,然后通过execv来调用dex2oat对dex文件进行优化。
但是我对把execv hook掉以后,发现dex2oat还是被调用了,和源码中的流程不太一样,这是为什么?

不同的系统版本好像不太一样,目前这个问题只在5.0.1和4.4的art虚拟机上出现,其它5.x系统是没问题的。

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

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 105
活跃值: (226)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
有些系统调用的是execl
2016-4-19 14:45
0
雪    币: 15
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
看过了,在libart.so里没有execl这个符号,而且hook了以后也同样不起作用。

你最近工作怎样?
2016-4-19 16:00
0
雪    币: 53
活跃值: (321)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
execve
2016-4-19 20:05
0
雪    币: 15
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
找了一下,还是没有
2016-4-19 20:17
0
雪    币: 15
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
看了一下libart.so的代码,确实会在GenerateOatFile中调用execl来执行dex2oat,但是不知道为什么没有hook成功,而且我用ida调试,在libc.so的execl中下断的时候,调试会失败,错误信息:
Fatal signal 4(SIGILL) at 0x401132de (code-1), thread 32064 (tdexclassloader)

不知道为什么,难道是系统库有什么反调试机制?期待高人帮忙

上面这个问题是因为ida不能调试多进程
2016-4-21 17:12
0
雪    币: 76
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
0e5K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6S2M7@1I4G2k6s2W2Q4x3V1k6f1N6i4u0T1L8@1c8W2P5l9`.`.

刚好看到这个
2016-4-21 18:17
0
雪    币: 15
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
已经在研究了,多谢!
2016-5-4 20:08
0
雪    币: 38
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
http://bbs.pediy.com/showthread.php?p=1402842#post1402842
这个帖子中的loadbyte中的
LOGI2("dvmDexFileOpenPartial_ptr=%p %p\n", dvmDexFileOpenPartial_ptr, dexCreateClassLookup_ptr);
这两个函数莫不是在5.0上自己写一遍么,
dvmDexFileOpenPartial ,dexCreateClassLookup
干掉dex2oat确实可行,剩下的在5.0上的解析dex是完全得自己写一遍么,
还请指教下
2016-8-29 10:33
0
雪    币: 68
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
他这里不就是hook execv吗?跟你之前有区别?
2016-9-8 16:54
0
雪    币: 15
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
干掉dex2oat是为了加快解析dex文件的速度,解析dex用dexclasloader就可以了,不需要自己实现
2016-9-28 14:50
0
游客
登录 | 注册 方可回帖
返回