outdoxl
(outdoxl)
1
在编写 Tweak 时,要 hook 类名带 ’ - ’ 的类名 ,类似下面的代码:
%hook className-Test
编译出错,错误信息:
Tweak.xm:64:1 error missing context for method declaration
-Test
^
Tweak.xm:66:1error expected method body
static void _logos_method$_ungrouped$className$methodName$...
看错误信息,将-Test 截断了,貌似是不支持 hook 这样的类
将 className-Test 改为 className ,编译就没问题。。
在 wiki 翻了 Logos 相关的内容,没有找到相关的说明
Goolge 了好久,也没找到解决方案(难道是姿势不对?)
异想天开的将 className-Test 整体包起来(单双引号,括号等)
编译报错,错误信息:
Tweak.xm:72: erro: dangling %end
将 className-Test 之间的 ’ - ’ 转义 变成 className-Test 一样报错,错误信息:
Tweak.xm:64:1 error: missing context for method declaration
\-Test
(以上两种方法都是胡乱的尝试。。)
难道是真不支持 hook 类名带 ’ - ’ 的类?(帖子添加代码后,对代码部分加粗、设置颜色发表后效果都变成 HTML 标签了。。。)
outdoxl
(outdoxl)
3
多谢大神回应
有什么解决方法吗? @snakeninny
我想 Theos 中应该有 %hook className 的解析类名的代码
我再看看 Theos 的代码
outdoxl
(outdoxl)
5
我看了 THEOS 的源码,在 bin/logos.pl 中改了几处正则,
还是编译报错(其他错误),折腾了好久。。(貌似是 Logos 本身就不支持?)
在翻 THEOS 源码是发现了 logify.pl
搜索得知 logify.pl 可以把的头文件转换成 Tweak.xm
于是将 NSData-Base64.h 转换为 Tweak.xm
/opt/theos/bin/logify.pl NSData-Base64.h > Tweak.xm
Tweak.xm 文件内容:
%hook NSData
+ (id)dataFromBase64String:(id)arg1{ %log; id r = %orig; NSLog(@" = %@", r); return r; }
- (id)base64EncodedString{ %log; id r = %orig; NSLog(@" = %@", r); return r; }
%end
NSData-Base64.h 文件内容:
#import "NSData.h"
@interface NSData (Base64)
+ (id)dataFromBase64String:(id)arg1;
- (id)base64EncodedString;
@end
之前将是将头文件的文件名直接当作类名来 hook 了。。。
仿照 logify.pl 生成的 Tweak , 写成 %hook className 即可
或者就直接用 logify.pl 先把 头文件转成 Tweak.xm 再进行修改
这也算一种解决方法吧。。
到这里我又想到 如果接口名称带 ‘-’ ,那 THEOS 应该就 hook 不了这个类了,
在一定程度上可以起到保护程序的作用。
(对 object-c 不熟,不清楚能不能这样命名,再试试看。。)
如果是的话,你就是问了一个XY问题。
我试了一下能不能在类名里带减号,发现果然不行,所以你的问题并不是hook类名里带减号的类,而是根本搞错了hook的对象
outdoxl
(outdoxl)
7
抱歉!
对 object-c 不熟,一般写 Java 多一点,Java 中文件名必须与类名一致,所以就天真的以为 文件名 就是 类名。。。没有细看头文件的内容。
我也试了,类名不能有 ’ - ’ 。
感谢大神指导。