- 问题背景
- 解决方法
- 总结
问题背景
在iOS逆向过程中,尽管可以根据class-dump获取应用相关头文件,但是如果成员变量没有声明为@property
,就无法获取到这部分变量的实例对象。
解决方法
在正向开发中,有一种方法可以根据实例对象获取到变量名。参考IOS高级教程2:反射根据变量的引用获取变量名。可以写出如下C风格的代码:
#import <objc/runtime.h>
/**
* 根据成员变量的实例对象获取在类中对应的变量名
*
* @param self 类自身的实例对象id
* @param instance 类中变量的实例对象id
*
* @return 实例对象的变量名
*/
NSString *getNameWithInstance(id self, id instance)
{
unsigned int numIvars = 0;
NSString *key=nil;
Ivar * ivars = class_copyIvarList([self class], &numIvars);
for(int i