当在调试器中看到实例变量的地址时,如何通过输入给定的内存地址来获取类?
我知道在调试器中使用 p someObjectInstance
或 NSLog(@"%p", someObjectInstance);
可能会发生相反的情况(从实例获取地址)从代码中。有没有类似的方法可以反过来做到这一点?
最佳答案
您要求的是非常不安全的。访问未知的内存位置通常不是一个好主意,但既然你问了:
编辑:如果在 gdb
或 lldb
中,您可以执行以下操作:
po [(id)(0xDEADBEEF) class]
但是,如果从代码运行,请使用以下内容;
NSString *input = @"0xFAFAFA";
unsigned address = UINT_MAX; // or UINT_MAX
[[NSScanner scannerWithString:input] scanHexInt:&address];
if (address == UINT_MAX)
{
// couldn't parse input...
NSLog(@"failed to parse input");
return 0;
}
void *asRawPointer = (void *) (intptr_t) address;
id value = (__bridge id) asRawPointer;
// now do something with 'value'
NSLog(@"%@", [value class]);
关于objective-c - 从 Objective-C 中的实例十六进制获取类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11462768/