objective-c - 从 Objective-C 中的实例十六进制获取类

标签 objective-c ios xcode

当在调试器中看到实例变量的地址时,如何通过输入给定的内存地址来获取类?

我知道在调试器中使用 p someObjectInstanceNSLog(@"%p", someObjectInstance); 可能会发生相反的情况(从实例获取地址)从代码中。有没有类似的方法可以反过来做到这一点?

最佳答案

您要求的是非常不安全的。访问未知的内存位置通常不是一个好主意,但既然你问了:

编辑:如果在 gdblldb 中,您可以执行以下操作:

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/

相关文章:

ios - UItableviewcontroller 不在行中显示数据并创建额外的行

objective-c - 将 NSTimeInterval 划分为 24 小时

objective-c - Objective-C中如何在不使用键盘的情况下按下键盘上的按键?

ios - 创建具有相同名称的串行队列的 2 个对象是否共享相同的队列

Objective-C:如果(对象)与。如果(对象!=无)

ios - 有人正在使用新的iOS 11.4.1经历无限的“等待”吗?

ios - 意外的 HTTP 状态代码 : 403 (-1) Xcode

xcode - 使用 by.text 进行排毒子串匹配

swift - 用swift 4.0编译的模块不能导入swift 3.0.2

ios - 如何让手电筒闪烁?