mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-05-21 00:27:07 +02:00
Update comments
This commit is contained in:
parent
53a8ba8cfe
commit
de7e5bdfe7
@ -52,14 +52,8 @@ using namespace std;
|
|||||||
// │ └───────────────────────┘
|
// │ └───────────────────────┘
|
||||||
// ▼
|
// ▼
|
||||||
// ┌──────────────────────────┐
|
// ┌──────────────────────────┐
|
||||||
// │androidSetCreateThreadFunc│
|
// │ strdup("ZygiskInit") │
|
||||||
// └─────────────┬────┬───────┘
|
// └─────────────┬────┬───────┘
|
||||||
// │ │ ┌────────────┐
|
|
||||||
// │ └────────────────►│hook_jni_env│
|
|
||||||
// ▼ └────────────┘
|
|
||||||
// ┌──────────────────┐
|
|
||||||
// │register_jni_procs│
|
|
||||||
// └────────┬────┬────┘
|
|
||||||
// │ │ ┌───────────────────┐
|
// │ │ ┌───────────────────┐
|
||||||
// │ └─────────────►│replace_jni_methods│
|
// │ └─────────────►│replace_jni_methods│
|
||||||
// │ └───────────────────┘ ┌─────────┐
|
// │ └───────────────────┘ ┌─────────┐
|
||||||
@ -85,13 +79,11 @@ using namespace std;
|
|||||||
// * NativeBridgeItf: this symbol is the entry point for android::LoadNativeBridge
|
// * NativeBridgeItf: this symbol is the entry point for android::LoadNativeBridge
|
||||||
// * HookContext::hook_plt(): hook functions like |dlclose| and |androidSetCreateThreadFunc|
|
// * HookContext::hook_plt(): hook functions like |dlclose| and |androidSetCreateThreadFunc|
|
||||||
// * dlclose: the final step before android::LoadNativeBridge returns
|
// * dlclose: the final step before android::LoadNativeBridge returns
|
||||||
// * androidSetCreateThreadFunc: called in AndroidRuntime::startReg before
|
// * strdup: called in AndroidRuntime::start before calling specializations routines
|
||||||
// |register_jni_procs|, which is when most native JNI methods are registered.
|
|
||||||
// * HookContext::hook_jni_env(): replace the |RegisterNatives| function pointer in JNIEnv.
|
// * HookContext::hook_jni_env(): replace the |RegisterNatives| function pointer in JNIEnv.
|
||||||
// * replace_jni_methods: called in the replaced |RegisterNatives| function to filter and replace
|
// * replace_jni_methods: replace the function pointers registered in register_jni_procs,
|
||||||
// the function pointers registered in register_jni_procs, most importantly the process
|
// most importantly the process specialization routines, which are our main targets.
|
||||||
// specialization routines, which are our main targets. This marks the final step
|
// This marks the final step of the code injection bootstrap process.
|
||||||
// of the code injection bootstrap process.
|
|
||||||
// * pthread_attr_destroy: called whenever the JVM tries to setup threads for itself. We use
|
// * pthread_attr_destroy: called whenever the JVM tries to setup threads for itself. We use
|
||||||
// this method to cleanup and unload Zygisk from the process.
|
// this method to cleanup and unload Zygisk from the process.
|
||||||
|
|
||||||
@ -102,7 +94,7 @@ struct HookContext {
|
|||||||
void hook_plt();
|
void hook_plt();
|
||||||
void hook_unloader();
|
void hook_unloader();
|
||||||
void restore_plt_hook();
|
void restore_plt_hook();
|
||||||
void hook_jni_env();
|
void replace_jni_methods();
|
||||||
void restore_jni_hook(JNIEnv *env);
|
void restore_jni_hook(JNIEnv *env);
|
||||||
void post_native_bridge_load();
|
void post_native_bridge_load();
|
||||||
|
|
||||||
@ -135,7 +127,7 @@ ret new_##func(__VA_ARGS__)
|
|||||||
|
|
||||||
DCL_HOOK_FUNC(char *, strdup, const char * str) {
|
DCL_HOOK_FUNC(char *, strdup, const char * str) {
|
||||||
if (strcmp(kZygiskInit, str) == 0) {
|
if (strcmp(kZygiskInit, str) == 0) {
|
||||||
g_hook->hook_jni_env();
|
g_hook->replace_jni_methods();
|
||||||
}
|
}
|
||||||
return old_strdup(str);
|
return old_strdup(str);
|
||||||
}
|
}
|
||||||
@ -452,7 +444,7 @@ void HookContext::restore_plt_hook() {
|
|||||||
hookJniNativeMethods(env, kZygote, method##_methods.data(), method##_methods.size()); \
|
hookJniNativeMethods(env, kZygote, method##_methods.data(), method##_methods.size()); \
|
||||||
for (auto m: method##_methods) if (m.fnPtr) { method##_orig = m.fnPtr; break; }
|
for (auto m: method##_methods) if (m.fnPtr) { method##_orig = m.fnPtr; break; }
|
||||||
|
|
||||||
void HookContext::hook_jni_env() {
|
void HookContext::replace_jni_methods() {
|
||||||
using method_sig = jint(*)(JavaVM **, jsize, jsize *);
|
using method_sig = jint(*)(JavaVM **, jsize, jsize *);
|
||||||
auto get_created_vms = reinterpret_cast<method_sig>(
|
auto get_created_vms = reinterpret_cast<method_sig>(
|
||||||
dlsym(RTLD_DEFAULT, "JNI_GetCreatedJavaVMs"));
|
dlsym(RTLD_DEFAULT, "JNI_GetCreatedJavaVMs"));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user