Skip to content

native/A64Inlinehook · arm64 inline hook ​

源码路径

src/main/jni/A64Inlinehook/(And64InlineHook.cpp + And64InlineHook.hpp)

arm64 专用的 inline hook 实现。处理 ARM64 指令集的 PC 相对寻址重定位——ARM64 的 B/BL 跳转范围有限(±128MB),inline hook 时要处理超出范围的跳转和被覆盖指令的重定位。

为什么 arm64 要单独一套 ​

ARM64 与 x86_64 的指令长度、寻址方式差异巨大,无法共用一套 inline hook:

  • ARM64 指令定长 4 字节,B/BL 跳转是 PC 相对、范围有限(±128MB)。
  • inline hook 要在目标函数入口写跳转指令,被覆盖的原指令要重定位到跳板,PC 相对寻址的指令重定位后偏移会变。
  • A64InlineHook 处理这些:构造跳板(trampoline)、重定位被覆盖指令、处理超出范围的远跳转。

与 Substrate 的关系 ​

Substrate 是 x86_64 的 inline hook 实现。两者独立,按 CPU 架构选用:

调用方 ​

  • IOUniformer —— IO 重定向,hook libc 文件操作函数(open/stat/access …)。见 IO 重定向。
  • VMPatch —— hook ART 虚拟机相关函数。

两者在 arm64 上调用 And64InlineHook 改写目标函数入口。

关联 ​

基于 VirtualApp 与 epic,仅供学习研究。VirtualApp 禁止商用。