Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何获取在iOS中使用标识符指定的应用程序的所有类?_Objective C_Jailbreak_Objective C Runtime_Tweak - Fatal编程技术网

Objective c 如何获取在iOS中使用标识符指定的应用程序的所有类?

Objective c 如何获取在iOS中使用标识符指定的应用程序的所有类?,objective-c,jailbreak,objective-c-runtime,tweak,Objective C,Jailbreak,Objective C Runtime,Tweak,我想在运行时获取指定应用程序的所有类(可能是任何其他应用程序,而不仅仅是应用程序本身),我可以使用该应用程序的标识符获取该应用程序的NSBundle,但是如何使用NSBundle获取类,或者我可以直接使用应用程序的标识符获取类?我们假设这可能是一个越狱的环境。我尝试了objc\u copyClassNamesForImage但失败了,有人有想法吗 NSBundle * bundle = [NSBundle bundleWithIdentifier:appIdentifier]; NSString

我想在运行时获取指定应用程序的所有类(可能是任何其他应用程序,而不仅仅是应用程序本身),我可以使用该应用程序的标识符获取该应用程序的
NSBundle
,但是如何使用
NSBundle
获取类,或者我可以直接使用应用程序的标识符获取类?我们假设这可能是一个越狱的环境。我尝试了
objc\u copyClassNamesForImage
但失败了,有人有想法吗

NSBundle * bundle = [NSBundle bundleWithIdentifier:appIdentifier];
NSString * bundlePath = [bundle bundlePath];
NSLog(@"%@", bundlePath);

unsigned int count;
const char **classes;

classes = objc_copyClassNamesForImage([bundlePath UTF8String], &count);

for (int i = 0; i< sizeof(classes)/sizeof(classes[0]); i++){
    NSLog(@"class name: %s", classes[i]);
}
NSBundle*bundle=[NSBundle bundleWithiIdentifier:appIdentifier];
NSString*bundlePath=[bundle bundlePath];
NSLog(@“%@”,bundlePath);
无符号整数计数;
常量字符**类;
classes=objc_copyClassNamesForImage([bundlePath UTF8String],&count);
对于(int i=0;i
将源代码抓取到类转储并进行处理。
objc_copyClassNamesForImage
只有在加载包时才起作用,遗憾的是(虽然这不是一个有文档记录的事实,但您可以在objc runtime.mm:536中看到)。您是否尝试使用
-[bundle load]
加载捆绑包,然后在捆绑包
executablePath
上使用
objc\u copyClassNamesForImage
而不是
bundlePath
?另一种解决方案与@bbum提到的类似,是反汇编目标可执行文件的mach-o二进制文件,然后从那里阅读类标题(格式不太复杂,特别是如果你只需要名称的话。你可以查看
\u getObjc2ClassList
及其在
objc runtime new.mm
中的用法)。@RichardJ.RossIII,在使用
objc\u copyClassNamesForImage
之前,我还没有尝试加载包,我现在就要试试,是吗(在objc_copyClassNamesForImage之前加载捆绑包)这是一个资源密集型的过程?我们有没有什么优雅的方法来获取具有标识符的应用程序的所有类?@Suge no,您在这里深入研究了不受支持的用例领域。仅供参考,在运行时加载objective-c类引用之前保存所有此类引用的相关
数据
部分是
\uobjc\uclasslist
,(您可能可以在
中与mach-o API一起使用)。抓取源代码到类转储并开始使用。
objc_copyClassNamesForImage
只有在加载包时才起作用,遗憾的是(尽管这不是一个有文档记录的事实,您可以在objc运行时看到它。mm:536)。您是否尝试使用
-[bundle load]
,然后在bundle
executablePath
上使用
objc\u copyClassNamesForImage
而不是
bundlePath
?另一种解决方案与@bbum提到的类似,就是分解目标可执行文件的mach-o二进制文件,并从中读取类头(格式不太复杂,特别是如果您只需要名称的话。您可以查看
\u getObjc2ClassList
及其在
objc runtime new.mm
)中的用法。@RichardJ.RossIII,在使用
objc\u copyclassnamsforimage
之前,我没有尝试加载包,我现在就尝试一下,但它是吗(在objc_copyClassNamesForImage之前加载捆绑包)这是一个资源密集型的过程?我们有没有什么优雅的方法来获取具有标识符的应用程序的所有类?@Suge no,您在这里深入研究了不受支持的用例领域。仅供参考,在运行时加载objective-c类引用之前保存所有此类引用的相关
数据
部分是
\uobjc\uclasslist
,(您可以在
中与mach-o API一起使用)。