gpt4 book ai didi

ios - 理论/标志 : Accessing Static/Global Variable Across Multiple Hooked Processes

转载 作者:行者123 更新时间:2023-11-29 02:21:48 25 4
gpt4 key购买 nike

当然,我对调整开发非常陌生,但我遇到了一个问题。我正在为个人用途进行调整,以 Hook 到多个进程,但我在这些特定于进程的 Hook 之间共享变量时遇到困难。例如,我的 SpringBoard 方法 Hook 能够设置静态变量的值,然后访问该值集。但是特定于应用程序的方法 Hook 无法检索 SpringBoard 方法上下文中设置的值。该变量返回时未初始化。

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

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

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

你明白了,我想在 Hook 的进程之间共享一个“全局变量”。谢谢你逗我开心。 :/

最佳答案

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

您还可以使用 %group 指令来根据您的调整实际 Hook 的进程来应用 Hook ,以便 SpringBoard 的 Hook 仅在 SpringBoard 进程中处于事件状态,并且不在应用程序上。这不会有太大改变,但不会有不必要的钩子(Hook)。

关于ios - 理论/标志 : Accessing Static/Global Variable Across Multiple Hooked Processes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28050523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com