Theos/Logos:跨多个挂钩进程访问 Static/Global 变量
Theos/Logos: Accessing Static/Global Variable Across Multiple Hooked Processes
当然,我对调整开发还很陌生,但我 运行 遇到了一个问题。我正在为个人使用进行调整,以挂钩到多个进程,但我很难在这些特定于进程的挂钩之间共享变量。例如,我的 SpringBoard 方法挂钩能够设置静态变量的值,然后访问该值集。但是特定于应用程序的方法挂钩无法检索在 SpringBoard 方法的上下文中设置的值。变量返回未初始化。
由于 tweak 库很常见,我如何在一个进程的挂钩上下文中初始化 "global" 库级变量并在另一个进程的上下文中访问该值。
我的第一次尝试是这样的:
static BOOL isEnabled;
%hook FirstProcessFirstClass
- (void) methodInFirstProcessFirstClass {
isEnabled = YES;
%orig;
}
%end
%hook FirstProcessSecondClass
- (void) methodInFirstProcessSecondClass {
// This will be 1 if it occurs after methodInFirstProcessFirstClass
NSLog("isEnabled equals %d", isEnabled);
%orig;
}
%end
%hook SecondProcessClass
- (void) methodInSecondProcessClass {
// This is always going to be uninitialized (i.e., 0)
NSLog("isEnabled equals %d", isEnabled);
%orig;
}
%end
你明白了,我想在挂钩进程之间共享一个 "global variable"。谢谢你逗我。 :/
跨进程共享变量比仅拥有全局变量要复杂一些。您需要使用某种形式的 IPC(进程间通信)来跨进程同步变量。由于您挂接了 SpringBoard 和 其他应用程序,您可以将 SpringBoard 设置为 "server" 以便它在其他进程上发送变量的新状态。
您还可以使用 %group
指令根据您的调整实际挂钩的进程来应用挂钩,以便 SpringBoard 的挂钩仅在 SpringBoard 进程中激活,而不在 SpringBoard 进程中激活应用程序。这不会有太大变化,但不会有不必要的钩子。
当然,我对调整开发还很陌生,但我 运行 遇到了一个问题。我正在为个人使用进行调整,以挂钩到多个进程,但我很难在这些特定于进程的挂钩之间共享变量。例如,我的 SpringBoard 方法挂钩能够设置静态变量的值,然后访问该值集。但是特定于应用程序的方法挂钩无法检索在 SpringBoard 方法的上下文中设置的值。变量返回未初始化。
由于 tweak 库很常见,我如何在一个进程的挂钩上下文中初始化 "global" 库级变量并在另一个进程的上下文中访问该值。
我的第一次尝试是这样的:
static BOOL isEnabled;
%hook FirstProcessFirstClass
- (void) methodInFirstProcessFirstClass {
isEnabled = YES;
%orig;
}
%end
%hook FirstProcessSecondClass
- (void) methodInFirstProcessSecondClass {
// This will be 1 if it occurs after methodInFirstProcessFirstClass
NSLog("isEnabled equals %d", isEnabled);
%orig;
}
%end
%hook SecondProcessClass
- (void) methodInSecondProcessClass {
// This is always going to be uninitialized (i.e., 0)
NSLog("isEnabled equals %d", isEnabled);
%orig;
}
%end
你明白了,我想在挂钩进程之间共享一个 "global variable"。谢谢你逗我。 :/
跨进程共享变量比仅拥有全局变量要复杂一些。您需要使用某种形式的 IPC(进程间通信)来跨进程同步变量。由于您挂接了 SpringBoard 和 其他应用程序,您可以将 SpringBoard 设置为 "server" 以便它在其他进程上发送变量的新状态。
您还可以使用 %group
指令根据您的调整实际挂钩的进程来应用挂钩,以便 SpringBoard 的挂钩仅在 SpringBoard 进程中激活,而不在 SpringBoard 进程中激活应用程序。这不会有太大变化,但不会有不必要的钩子。