Logos構文
3696 ワード
//Tweak.xm
hookが必要なclassを指定し、%endで終わる必要があります
このコードの意味はSpringBoardクラスにチェックを入れることです.menuButtonDown:関数は、syslogに文を書き込んでから、関数の元の操作を実行します.
この命令は%hook内部で使用され,関数のクラス名,パラメータなどの情報をsyslogに書き込む.
この命令は%hook内部で使用され,チェックされた関数の元のコードを実行する.例:
*%orig*を削除すると、元の関数は実行されません.
元の行数のパラメータを%origで変更することもできます.
この方法は、ロック画面の日付表示を変更する.
この命令は*%hookをグループ化するために使用され、コード管理と条件によってグループを初期化しやすく、%endで終わる必要があります.1つの%groupには複数の%hookを含めることができ、カスタムgroupに属していないすべての%hookは%group_に暗黙的に分類されます.ungroupes*にあります.使用法は次のとおりです.
このコマンドは*%groupを初期化するために使用され、%hookまたは%ctor*内で呼び出さなければなりません.パラメータが付いている場合は指定したgroupを初期化し、パラメータが付いていない場合は_を初期化します.ungrouped、次のようにします.
%initを呼び出してこそ、対応する%groupが機能します.
tweakの*constructor*は初期化作業を完了します.明示的に定義しない場合、Theosは自動的に*%ctorを生成し、%init(_ungrouped)*を呼び出します.そのため、
Theosは次のように暗黙的に定義されているため、有効になります.
そして
の%hookは有効になりません.%ctorが定義されているのに%initが呼び出されていないため、%group(_ungrouped)は機能しません.%ctorは一般的に%groupを初期化したり、MSHookFunctionなどの操作を行うために使用できます.
%ctorは%endで終わる必要はありません.
%hookの内部で使用し、既存のclassに新しい関数を追加し、class_と機能します.addMethodは同じです.次のように使用されます.
この命令の役割はobjc_に等しいgetClassまたはNSClassFromStringは、クラスの定義を動的に取得し、%hookまたは%ctorで使用します.
1.前処理命令
%hook
hookが必要なclassを指定し、%endで終わる必要があります
%hook SpringBoard
- (void)_menuButtonDown:(id)down
{
NSLog(@" ");
%orig;//call the original _menuButtonDown;
}
%end
このコードの意味はSpringBoardクラスにチェックを入れることです.menuButtonDown:関数は、syslogに文を書き込んでから、関数の元の操作を実行します.
%log
この命令は%hook内部で使用され,関数のクラス名,パラメータなどの情報をsyslogに書き込む.
%hoot SpringBoard
- (void)_menubuttonDown:(id)down
{
%log((NSString *)@"iOSRE",(NSString *)@"Debug");
%orig;//call the original _menuButtonDown;
}
%end
%orig
この命令は%hook内部で使用され,チェックされた関数の元のコードを実行する.例:
%hook SpringBoard
- (void)_menuButtonDown:(id)down
{
NSLog(@" ");
%orig; //
}
%end
*%orig*を削除すると、元の関数は実行されません.
hook SpringBoard
- (void)_menuButtonDown:(id)down
{
NSLog(@" ");
}
%end
元の行数のパラメータを%origで変更することもできます.
%hook SBLockScreenDateViewController
- (void)setCustomSubtitleText:(id)arg1 withColor:(id)arg2
{
%orig(@"Re",arg2);
}
%end
この方法は、ロック画面の日付表示を変更する.
%group
この命令は*%hookをグループ化するために使用され、コード管理と条件によってグループを初期化しやすく、%endで終わる必要があります.1つの%groupには複数の%hookを含めることができ、カスタムgroupに属していないすべての%hookは%group_に暗黙的に分類されます.ungroupes*にあります.使用法は次のとおりです.
%group iOS7Hook
%hook iOS7Class
- (id)iOS7Method {
id result = %orig;
NSLog(@"This class & method only exist in iOS 7.");
return result;
} %end
%end // iOS7Hook
%group iOS8Hook
%hook iOS8Class
- (id)iOS8Method {
id result = %orig;
NSLog(@"This class & method only exist in iOS 8."); return result;
}
%end
%end // iOS8Hook
%init
このコマンドは*%groupを初期化するために使用され、%hookまたは%ctor*内で呼び出さなければなりません.パラメータが付いている場合は指定したgroupを初期化し、パラメータが付いていない場合は_を初期化します.ungrouped、次のようにします.
#ifndef kCFCoreFoundationVersionNumber_iOS_8_0
#define kCFCoreFoundationVersionNumber_iOS_8_0 1140.10 #endif
%hook SpringBoard
- (void)applicationDidFinishLaunching:(id)application {
%orig;
%init; // Equals to %init(_ungrouped)
if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_7_0 && kCFCoreFoundationVersionNumber < kCFCoreFoundationVersionNumber_iOS_8_0)
%init(iOS7Hook);
if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_8_0)
%init(iOS8Hook);
}
%end
%initを呼び出してこそ、対応する%groupが機能します.
%ctor
tweakの*constructor*は初期化作業を完了します.明示的に定義しない場合、Theosは自動的に*%ctorを生成し、%init(_ungrouped)*を呼び出します.そのため、
%hook SpringBoard
- (void)reboot {
NSLog(@"If rebooting doesn't work then I'm screwed.");
%orig;
}
%end
Theosは次のように暗黙的に定義されているため、有効になります.
%ctor
{
%init(_ungrouped);
}
そして
%hook SpringBoard
- (void)reboot{
NSLog(@"If rebooting doesn't work then I'm screwed.");
%orig;
}
%end
%ctor
{
// Need to call %init explicitly!
}
の%hookは有効になりません.%ctorが定義されているのに%initが呼び出されていないため、%group(_ungrouped)は機能しません.%ctorは一般的に%groupを初期化したり、MSHookFunctionなどの操作を行うために使用できます.
%ctorは%endで終わる必要はありません.
%new
%hookの内部で使用し、既存のclassに新しい関数を追加し、class_と機能します.addMethodは同じです.次のように使用されます.
%hook SpringBoard
%new
- (void)namespaceNewMethod {
NSLog(@"We've added a new method to SpringBoard.");
}
%end
%c
この命令の役割はobjc_に等しいgetClassまたはNSClassFromStringは、クラスの定義を動的に取得し、%hookまたは%ctorで使用します.