更新第7章目录

This commit is contained in:
feiocng 2023-07-10 09:51:03 +08:00
parent e05290acaa
commit ef5258c106
2 changed files with 6 additions and 5 deletions

View File

@ -179,7 +179,7 @@ make -j$(nproc --all)
根据以上的信息,知道了图标是在`res``mipmap`开头的目录中。在这里以桌面的中的`Setting`应用为例子,找到目录`packages/apps/Settings/res/mipmap-hdpi/`看到了对应桌面中`Setting`的应用程序图标,文件名为`ic_launcher_settings.png`。而要替换该图标,直接使用新文件替换该图标即可。 根据以上的信息,知道了图标是在`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 ```python
import os import os

View File

@ -937,7 +937,7 @@ DexFile::DexFile(const uint8_t* base,
![image-20230325190621427](.\images\dex_header.png) ![image-20230325190621427](.\images\dex_header.png)
### 7.3 函数调用流程 ## 7.3 函数调用流程
在Android中**Java**函数和**native**函数的调用方式略有不同。 在Android中**Java**函数和**native**函数的调用方式略有不同。
@ -1642,6 +1642,7 @@ public interface Opcodes {
到这里,就找到对应的执行`C++`函数将`Dex`的指令逐一进行执行处理,其对应的`C++`执行部分则在文件`mterp.cc`文件中找到。`Mterp`的执行流程到这里就非常清晰了。 到这里,就找到对应的执行`C++`函数将`Dex`的指令逐一进行执行处理,其对应的`C++`执行部分则在文件`mterp.cc`文件中找到。`Mterp`的执行流程到这里就非常清晰了。
## 7.5 ExecuteSwitch ## 7.5 ExecuteSwitch
`ExecuteSwitch`是基于 `switch `语句实现的一种解释器,用于执行当前方法的指令集。在 `Android` 应用程序中,每个方法都会对应一组指令集,用于描述该方法的具体实现。当该方法被调用时,系统需要按照指令集来执行相应的操作,从而实现该方法的功能并计算出结果。 `ExecuteSwitch`是基于 `switch `语句实现的一种解释器,用于执行当前方法的指令集。在 `Android` 应用程序中,每个方法都会对应一组指令集,用于描述该方法的具体实现。当该方法被调用时,系统需要按照指令集来执行相应的操作,从而实现该方法的功能并计算出结果。
@ -1795,6 +1796,6 @@ class InstructionHandler {
需要注意的是,在执行的优化中,当强制走解释器流程调用后,它会交给`JIT`编译器进行编译,生成本地机器码。在生成机器码的同时,`JIT`编译器会将该函数的入口地址设置为生成的机器码的地址。在下一次调用该函数时,虚拟机就会跳过解释器阶段,直接执行机器码,从而提高程序的执行效率。 需要注意的是,在执行的优化中,当强制走解释器流程调用后,它会交给`JIT`编译器进行编译,生成本地机器码。在生成机器码的同时,`JIT`编译器会将该函数的入口地址设置为生成的机器码的地址。在下一次调用该函数时,虚拟机就会跳过解释器阶段,直接执行机器码,从而提高程序的执行效率。
## 本章小结 ## 7.6 本章小结
本章主要介绍了安卓系统中DEX文件的类的加载机制与细节。相比于实际操作动手修改代码本章介绍的内容显示更加枯燥乏味但是深入了解系统内部的运行机制有助于更宏观视角的去理解的程序执行。掌握这一部分内容在代码修改点的选择上尤其是系统组件的部分代码将会更加精准。而且本章内容同样适合于二进制安全对抗研究领域是研究软件加密与解密必不可少的基础知识。 本章主要介绍了安卓系统中DEX文件的类的加载机制与细节。相比于实际操作动手修改代码本章介绍的内容显示更加枯燥乏味但是深入了解系统内部的运行机制有助于更宏观视角的去理解的程序执行。掌握这一部分内容在代码修改点的选择上尤其是系统组件的部分代码将会更加精准。而且本章内容同样适合于二进制安全对抗研究领域是研究软件加密与解密必不可少的基础知识。