mirror of
https://github.com/feicong/rom-course.git
synced 2025-06-20 18:00:29 +00:00
更新第7章目录
This commit is contained in:
parent
e05290acaa
commit
ef5258c106
@ -179,7 +179,7 @@ make -j$(nproc --all)
|
||||
|
||||
根据以上的信息,知道了图标是在`res`中`mipmap`开头的目录中。在这里以桌面的中的`Setting`应用为例子,找到目录`packages/apps/Settings/res/mipmap-hdpi/`看到了对应桌面中`Setting`的应用程序图标,文件名为`ic_launcher_settings.png`。而要替换该图标,直接使用新文件替换该图标即可。
|
||||
|
||||
当然,如果要全部手动替换,来将系统中的图标更换是非常费力的一件事情,所以在了解完替换图标的原理后,可以通过开发一个简单的脚本来完成,例如`Setting`的图标是`ic_launcher_settings.png`,`Contacts`的图标是`ic_contacts_launcher.png`,`Calendar`的图标为`ic_launcher_calendar.png`,将系统中的常用图标找齐对应的文件名后,通过脚本来搜索目录,找到对应路径,然后根据新的素材文件对其一一替换,即可完成批量的工作。实现代码如下。
|
||||
当然,如果要全部手动替换,来将系统中的图标更换是非常费力的一件事情,所以在了解完替换图标的原理后,可以通过开发一个简单的脚本来完成,例如`Setting`的图标是`ic_launcher_settings.png`,`Contacts`的图标是`ic_contacts_launcher.png`,`Calendar`的图标为`ic_launcher_calendar.png`,将系统中的常用图标找齐对应的文件名后,通过脚本来搜索目录,找到对应路径,然后根据新的素材文件对其一一替换,即可完成批量的工作。replaceIcon程序实现代码如下。
|
||||
|
||||
```python
|
||||
import os
|
||||
|
@ -937,7 +937,7 @@ DexFile::DexFile(const uint8_t* base,
|
||||

|
||||
|
||||
|
||||
### 7.3 函数调用流程
|
||||
## 7.3 函数调用流程
|
||||
|
||||
在Android中,**Java**函数和**native**函数的调用方式略有不同。
|
||||
|
||||
@ -1514,9 +1514,9 @@ static inline JValue Execute(
|
||||
|
||||
在`Mterp`模式下,`Dex `指令集被转化成了一组` C++ `的函数,这些函数对应` Dex `指令集中的每一条指令。`ExecuteMterpImpl`实际上就是调用这些函数来逐条解释执行当前方法的指令集。
|
||||
|
||||
在` Android 4.4`中,系统首次引入了 `Mterp` 技术来加速应用程序的解释执行。在此之后的 `Android`版本中,`Mterp `技术得到了不断优化和完善,并逐渐成为` Android `平台的主要方法执行方式之一。
|
||||
在`Android 4.4`中,系统首次引入了 `Mterp` 技术来加速应用程序的解释执行。在此之后的 `Android`版本中,`Mterp `技术得到了不断优化和完善,并逐渐成为` Android `平台的主要方法执行方式之一。
|
||||
|
||||
从` Android 6.0`开始,`Dalvik `运行时环境被弃用,取而代之的是` ART `运行时环境。`ART` 运行时环境可以通过` JIT `编译、`AOT `编译和` Mterp `等多种方式来执行应用程序的代码,其中` Mterp `技术被广泛使用于 `Android` 应用程序的解释执行过程中。但是对于某些特定的场景和应用程序,系统可能还是会选择其他的执行方式来获得更好的性能和效率。
|
||||
从`Android 6.0`开始,`Dalvik `运行时环境被弃用,取而代之的是` ART `运行时环境。`ART` 运行时环境可以通过` JIT `编译、`AOT `编译和` Mterp `等多种方式来执行应用程序的代码,其中` Mterp `技术被广泛使用于 `Android` 应用程序的解释执行过程中。但是对于某些特定的场景和应用程序,系统可能还是会选择其他的执行方式来获得更好的性能和效率。
|
||||
|
||||
`ExecuteMterpImpl`使用了汇编语言和` C++`语言混合编写,需要有一定的汇编和` C++ `编程经验才能理解其含义和功能。该代码主要实现了以下功能:
|
||||
|
||||
@ -1642,6 +1642,7 @@ public interface Opcodes {
|
||||
|
||||
到这里,就找到对应的执行`C++`函数将`Dex`的指令逐一进行执行处理,其对应的`C++`执行部分则在文件`mterp.cc`文件中找到。`Mterp`的执行流程到这里就非常清晰了。
|
||||
|
||||
|
||||
## 7.5 ExecuteSwitch
|
||||
|
||||
`ExecuteSwitch`是基于 `switch `语句实现的一种解释器,用于执行当前方法的指令集。在 `Android` 应用程序中,每个方法都会对应一组指令集,用于描述该方法的具体实现。当该方法被调用时,系统需要按照指令集来执行相应的操作,从而实现该方法的功能并计算出结果。
|
||||
@ -1795,6 +1796,6 @@ class InstructionHandler {
|
||||
需要注意的是,在执行的优化中,当强制走解释器流程调用后,它会交给`JIT`编译器进行编译,生成本地机器码。在生成机器码的同时,`JIT`编译器会将该函数的入口地址设置为生成的机器码的地址。在下一次调用该函数时,虚拟机就会跳过解释器阶段,直接执行机器码,从而提高程序的执行效率。
|
||||
|
||||
|
||||
## 本章小结
|
||||
## 7.6 本章小结
|
||||
|
||||
本章主要介绍了安卓系统中DEX文件的类的加载机制与细节。相比于实际操作动手修改代码,本章介绍的内容显示更加枯燥乏味,但是深入了解系统内部的运行机制,有助于更宏观视角的去理解的程序执行。掌握这一部分内容,在代码修改点的选择上,尤其是系统组件的部分代码,将会更加精准。而且,本章内容同样适合于二进制安全对抗研究领域,是研究软件加密与解密必不可少的基础知识。
|
||||
|
Loading…
x
Reference in New Issue
Block a user