theos/logos:跨多个钩接进程访问静态/全局变量



当然,我对调整开发很陌生,但我遇到了一个问题。 我正在研究一个供个人使用的调整,它挂接到多个进程,但我很难在这些特定于进程的钩子之间共享变量。 例如,我的 SpringBoard 方法钩子能够设置静态变量的值,然后访问该值集。 但是,特定于应用的方法挂钩无法检索在 SpringBoard 方法上下文中设置的值。 变量返回时未初始化。

由于调整库很常见,我如何在一个进程钩子的上下文中初始化"全局"库级变量并在另一个进程的上下文中访问该值。

我的第一次尝试看起来像这样:

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

你明白了,我想在钩子进程之间共享一个"全局变量"。 谢谢你幽默我。 :/

跨进程共享变量比仅拥有全局变量要复杂一些。您需要使用某种形式的 IPC(进程间通信)来跨进程同步变量。由于你挂接了 SpringBoard 和其他应用程序,你可以将 SpringBoard 设置为"服务器",以便它将变量的新状态发送到其他进程上。

您还可以使用 %group 指令根据调整实际挂钩的进程来应用钩子,以便 SpringBoard 的钩子仅在 SpringBoard 进程中处于活动状态,而不是在应用程序上。这不会有太大变化,但不会有不必要的钩子。

最新更新