2015-01-20 1 views
0

개발 과정을 조정하는 데 아주 신 났지만 문제가 있습니다. 개인적인 사용을 위해 여러 프로세스를 연결하는 비틀기 작업을하고 있지만 프로세스 관련 후크간에 변수를 공유하는 데 어려움을 겪고 있습니다. 예를 들어, SpringBoard 메소드 훅은 정적 변수의 값을 설정 한 다음 값 세트에 액세스 할 수 있습니다. 그러나 앱 특정 메소드 훅은 SpringBoard 메소드 컨텍스트 내에서 설정된 값을 검색 할 수 없습니다. 변수가 다시 초기화되지 않습니다.Theos/Logos : 여러 후크 프로세스에서 정적/글로벌 변수에 액세스

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

프로세스간에 변수를 공유하는 것은 전역 변수를 갖는 것보다 약간 복잡합니다. 프로세스간에 변수를 동기화하려면 어떤 형태의 IPC (프로세스 간 통신)을 사용해야합니다. SpringBoard 다른 응용 프로그램을 후킹하므로 SpringBoard를 "서버"로 설정하여 다른 프로세스에서 변수의 새 상태를 전송할 수 있습니다.

%group 지시어를 사용하여 조정할 프로세스에 따라 후크를 적용 할 수 있으므로 SpringBoard의 후크는 응용 프로그램이 아닌 SpringBoard 프로세스에서만 활성화됩니다. 이것은 많이 변하지 않을 것이지만, 불필요한 갈고리가 제자리에 없을 것입니다.

+0

감사합니다. Logos가 방법을 연결하는 작업을 실제로 얼마나 잘 이해하고 있는지 보여주고있는 것 같습니다. 필자의 가정은 라이브러리에 공통적 인 변수를 어떤 방식 으로든 공유 할 수 있다는 것이었지만 그 삶은 그리 쉽지는 않다. "IPC"는 내가 GitHub에서 사용할 필요가있는 검색어였습니다. 작동하는 구현을 생성 할 수 있다면 내 결과를 대답으로 게시 하겠지만이를 받아 들일 것입니다. 그 동안 우리는 그 밖의 무엇이 그 전선 위에 나올지 알게 될 것입니다. 다시 한 번 감사드립니다! –

+0

다시 도움 주셔서 감사합니다. 여기에서 튜토리얼을 시작했다. http://iphonedevwiki.net/index.php/CPDistributedMessagingCenter 및 구현 된 RocketBootstrap은 IPC를 달성 할 수 있지만 고통스럽게 느리다 ... –

관련 문제