书上说来自于外部的dylib,在ios8所有dump的头文件才有。我应该去哪获取这些文件
先利用Objc运行时拿这个类任意一个方法的IMP然后dladdr就找到库文件位置了
引用
#import <objc/runtime.h>
#include <dlfcn.h>
@interface MessageMiniMall : NSObject
- (id)copyAllMessages;
%hook MailboxContentViewController
-
(void)miniMallFinishedFetch:(NSNotification *)arg1 {
%orig;
NSLog(@“self: %@”,self);
NSLog(@“miniMallFinishedFetch: %@”,[(MessageMiniMall *)arg1.object copyAllMessages]);IMP imp = class_getMethodImplementation(NSClassFromString(@“MFLibraryMessage”), @selector(deliveryInfo));
Dl_info info;
if (dladdr(imp, &info)) {printf("dli_fname: %s\n", info.dli_fname); printf("dli_sname: %s\n", info.dli_sname); printf("dli_fbase: %p\n", info.dli_fbase); printf("dli_saddr: %p\n", info.dli_saddr);
} else {
printf("error: can't find that symbol.\n");
}
}
%end
引用
这是我的tweak,但是报错了。下面是错误信息
引用
SMLdeMacBook-Pro:mobilemailtweak SML$ make
Making all for tweak MobileMailTweak…
==> Preprocessing Tweak.xm…
==> Compiling Tweak.xm (armv7)…
Tweak.xm:22:9: error: no matching function for call to ‘dladdr’
if (dladdr(imp, &info)) {
^~~~~~
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.0.sdk/usr/include/dlfcn.h:52:12: note:
candidate function not viable: no known conversion from ‘IMP’ (aka ‘id
_Nullable (*)(id _Nonnull, SEL _Nonnull, …)’) to ‘const void *’ for 1st
argument; take the address of the argument with &
extern int dladdr(const void *, Dl_info *);
^
1 error generated.
引用
这不写了么
还是没明白我应该改哪里。传参是&info的吧
……clang的语法提示这么清楚……
可以了 谢啦
if (dladdr(imp, &info)) {
} else {
}
但在tweak里获取失败了。走得是else ,没有拿到地址信息。
我记错了可能。试试不加&直接强制类型转化
我新建了一个oc项目,imp不加&,
if (dladdr(imp, &info)) {
} else {
}
像这样是可以获取到地址信息,但是我在tweak里不加&,编译不通过就爆上面的错了。
张总,像这种还有别的办法能拿到吗
报错信息下面有一串类似-W啥啥啥的东西。改成-Wno啥啥啥加进CFLAGS
dladdr((void *)imp, &info)
引用
May 27 10:15:46 SMLde-iPad MobileMail[2022] : miniMallFinishedFetch
May 27 10:15:46 SMLde-iPad MobileMail[2022] : dli_fname: /System/Library/PrivateFrameworks/Message.framework/Message
May 27 10:15:46 SMLde-iPad MobileMail[2022] : dli_sname:
May 27 10:15:46 SMLde-iPad MobileMail[2022] : dli_fbase: Œ˙Ì˛
May 27 10:15:46 SMLde-iPad MobileMail[2022] : dli_saddr:
引用
这个是可以了,但是我获取到的路径
/System/Library/PrivateFrameworks/Message.framework/Message这个路劲不管是mac还是ios设备上 都没有找到最后这个Message
用void * 就可以编译通过了,但是获取的路径/System/Library/PrivateFrameworks/Message.framework/Message这个路劲不管是mac还是ios设备上 都没有找到最后这个Message
dyld_decache
嗦嘎,找到了