iOS8使用一组私有API,但是里面有一些函数报错找不到符号

我想在iOS8里面使用一组NetworkExtension.framework里面的私有API

但是我使用MSFindSymbol来查找符号地址。里面居然有一些找不到符号。

NSLog(@"+ MSFindSymbol: %p",    (void *)MSFindSymbol(NULL, "_NEVirtualInterfaceCreateFromSocket"));
NSLog(@"+ MSFindSymbol: %p",    (void *)MSFindSymbol(NULL, "_NEVirtualInterfaceSetReadAutomatically"));
NSLog(@"+ MSFindSymbol: %p",    (void *)MSFindSymbol(NULL, "_NEVirtualInterfaceSetReadMultipleIPPacketsHandler"));
NSLog(@"+ MSFindSymbol: %p",    (void *)MSFindSymbol(NULL, "_NEVirtualInterfaceReadyToReadMultiple"));
NSLog(@"+ MSFindSymbol: %p",    (void *)MSFindSymbol(NULL, "_NEVirtualInterfaceWriteMultipleIPPackets"));

25!

就拿_NEVirtualInterfaceSetReadMultipleIPPacketsHandler来说,这个函数在NetworkExtension里是有的。看我从设备上导出来的库

在iOS8的SDK里面NetworkExtension.tbd这个文件里面也有这个函数.

而且我在iOS9上这些函数都可以HOOK到,日志都能打印出来。这是为什么?

我看了一下,拿_NEVirtualInterfaceSetReadMultipleIPPacketsHandler 来说,貌似iOS 9上有这个函数,但iOS 8里没有?见:

iOS 8的NetworkExtension-Symbols.h v.s. iOS 9的NetworkExtension-Symbols.h

我刚重新导出来了一个IOS8的,跟你的runtime header里面是一样的。还真是的是我导dyld_shared_cache导错了,估计是当时手机连了几个,我scp拷出来的时候,拷的另外的设备里面的。