Theos / Logos:跨多个钩子进程访问静态/全局变量

时间:2015-01-20 16:34:13

标签: ios iphone jailbreak iphone-privateapi

如此认可,我很擅长调整开发,但我遇到了一个问题。我正在进行个人使用的调整,它涉及到多个进程,但是我在这些特定于进程的钩子之间共享变量时遇到了困难。例如,我的SpringBoard方法钩子能够设置静态变量的值,然后访问值集。但是特定于应用程序的方法钩子无法在SpringBoard方法的上下文中检索值集。该变量未初始化。

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

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

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

你得到的图片,我想在钩住的进程之间共享一个“全局变量”。谢谢你的幽默。 :/

1 个答案:

答案 0 :(得分:1)

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

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