Logos語法

// Tweak.xm

1.預處理指令

%hook

指定需要hook的class髓棋,必須以%end結尾

%hook SpringBoard
- (void)_menuButtonDown:(id)down
{
    NSLog(@"你好");
    %orig;//call the original _menuButtonDown;
}
%end

這段代碼的意思是勾住(hook) SpringBoard 類里的_menuButtonDown: 函數(shù),先將一句話寫入 syslog , 再執(zhí)行函數(shù)的原有操作抒痒。

%log

該指令在%hook內(nèi)部使用恰起,將函數(shù)的類名修械、參數(shù)等信息寫入syslog。

%hoot SpringBoard
- (void)_menubuttonDown:(id)down
{
    %log((NSString *)@"iOSRE",(NSString *)@"Debug");
    %orig;//call the original _menuButtonDown;
}
%end

%orig

該指令在%hook內(nèi)部使用检盼,執(zhí)行被勾住(hook)的函數(shù)的原始代碼肯污。例如:

%hook SpringBoard
- (void)_menuButtonDown:(id)down
{
    NSLog(@"你好");
    %orig; // 
}
%end

如果去掉 *%orig * 那么原始函數(shù)不會執(zhí)行。

hook SpringBoard
- (void)_menuButtonDown:(id)down
{
    NSLog(@"你好");
}
%end

還可以利用 %orig 更改原始行數(shù)的參數(shù)吨枉。

%hook SBLockScreenDateViewController
- (void)setCustomSubtitleText:(id)arg1 withColor:(id)arg2
{
    %orig(@"Re",arg2);
}
%end

這個方法會改變鎖屏界面的日期顯示.

%group

該指令用于將* %hook 分組蹦渣,便于代碼管理及按條件初始化分組,必須以 %end 結尾貌亭;一個 %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 *內(nèi)調(diào)用;如果帶參數(shù),則初始化指定的 group,如果不帶參數(shù),則初始化 _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

只有調(diào)用了 %init,對應的 %group 才能起作用,切 切 !

%ctor

tweak 的* constructor *完成初始化工作;如果不顯式定義,Theos會自動生成一個 *%ctor ,并在其中調(diào)用 %init(_ungrouped) *圃庭。因此,

%hook SpringBoard 
- (void)reboot {
    NSLog(@"If rebooting doesn't work then I'm screwed.");
    %orig;
}
%end

可以成功生效,因為 Theos 隱式定義了如下內(nèi)容:

%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 美尸,卻沒有調(diào)用 %init%group(_ungrouped) 不起作用斟薇。%ctor 一般可以用來初始化 %group ,以及進行 MSHookFunction 等操作。

注意, %ctor 不需要以 %end 結尾 恕酸。

%new

%hook 內(nèi)部使用,給一個現(xiàn)有 class 加新函數(shù),功能與 class_addMethod 相同堪滨。它的用法如下:

%hook SpringBoard 
%new 
- (void)namespaceNewMethod {
     NSLog(@"We've added a new method to SpringBoard."); 
}
%end

%c

該指令的作用等同于 objc_getClassNSClassFromString,即動態(tài)獲 一個類的定義,在 %hook%ctor 內(nèi)使用。

%subclass

%config

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蕊温,一起剝皮案震驚了整個濱河市袱箱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌义矛,老刑警劉巖发笔,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異凉翻,居然都是意外死亡了讨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門制轰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來前计,“玉大人,你說我怎么就攤上這事垃杖∧需荆” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵调俘,是天一觀的道長伶棒。 經(jīng)常有香客問我,道長彩库,這世上最難降的妖魔是什么肤无? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮侧巨,結果婚禮上舅锄,老公的妹妹穿的比我還像新娘。我一直安慰自己司忱,他們只是感情好皇忿,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坦仍,像睡著了一般鳍烁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上繁扎,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天幔荒,我揣著相機與錄音糊闽,去河邊找鬼。 笑死爹梁,一個胖子當著我的面吹牛右犹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播姚垃,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼念链,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了积糯?” 一聲冷哼從身側響起掂墓,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎看成,沒想到半個月后君编,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡川慌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年吃嘿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窘游。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡唠椭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出忍饰,到底是詐尸還是另有隱情贪嫂,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布艾蓝,位于F島的核電站力崇,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏赢织。R本人自食惡果不足惜亮靴,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望于置。 院中可真熱鬧茧吊,春花似錦、人聲如沸八毯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽话速。三九已至讶踪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間泊交,已是汗流浹背乳讥。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工柱查, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人云石。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓唉工,卻偏偏與公主長得像,于是被迫代替她去往敵國和親留晚。 傳聞我的和親對象是個殘疾皇子酵紫,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容