IDA反汇编/反编译静态分析iOS模拟器程序(七)识别类的信息

简介: C++类的实质是个结构体。先举个例: class TestClass{ int m_val1; int m_val2;public: int getVal1(); int getVal2();};i...

C++类的实质是个结构体。先举个例:

class TestClass
{
    int m_val1;
    int m_val2;
public:
    int getVal1();
    int getVal2();
};

int TestClass::getVal1()
{
    return m_val1;
}
int TestClass::getVal2()
{
    return m_val2;
}

反编译两个函数,得到的是

int __cdecl TestClass__getVal1(int a1)
{
  return *(_DWORD *)a1;
}
int __cdecl TestClass__getVal2(int a1)
{
  return *(_DWORD *)(a1 + 4);
}
getVal1直接返回this指针的解引用,也就是m_val1的内存地址和实例对象是一致的,m_val2则是在m_val1的后一个int,所以是this指针+4字节。

如果类有虚函数,则与this指针同地址的是一个虚函数表,各个成员变量的偏移会+4。虚表的应用可看看《利用IDA和LLDB探索WebCore的C++类的继承关系

明白以上这个原理,在反编译C++类的代码时,看见a1+x的地方就能猜出是在访问成员变量。

关于C++的反编译很多资料都有提及了,这里不赘述。除了《IDA Pro权威指南》那本书,推荐两篇文章:

逆向 C++-- 识别类及其构造函数

逆向 C++-- 2 识别类

下面说说Objective-C的。

在反汇编的窗口搜索(Alt+T)关键字 _objc_ivar


随意找到哪个,双击它,便会跳转到Objective-C类保存成员变量信息的区域,以__objc_ivar:开头的偏移段。


OC(Objective-C)这样做,主要是为了Key-Value Coding,方便了开发者,却也方便了逆向工程者,多了一些C++类没有的信息。

图中绿色的字符是代表相对偏移,即对于self指针的地址加上多少就是访问此成员变量,与上面C++类的概念相同。

对一些复杂类型的变量,还可以查找到它的类型信息。

例如在_OBJC_IVAR_$_UIView._gestureRecognizers上查看引用


选择以__objc_const开头的引用来跳转


这几行是ivar结构体的保存区域。

00000000 __objc2_ivar    struc ; (sizeof=0x14)   ; XREF: __objc_const:000054E8
目录
相关文章
|
5月前
|
存储 运维 安全
iOS加固原理与常见措施:保护移动应用程序安全的利器
iOS加固原理与常见措施:保护移动应用程序安全的利器
74 0
|
5月前
|
定位技术 iOS开发
iOS设备功能和框架: 如何使用 Core Location 获取设备的位置信息?
iOS设备功能和框架: 如何使用 Core Location 获取设备的位置信息?
69 0
加快软盘操作速度的汇编程序源代码
加快软盘操作速度的汇编程序源代码
|
2月前
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
|
2月前
|
程序员 编译器 数据处理
汇编高手秘籍:解锁性能优化新境界,用汇编语言让你的程序飞起来!
【8月更文挑战第31天】汇编语言作为编程基石,其高效性能备受推崇。尽管现代软件开发更偏爱高级语言,但在性能要求极高的场景下,汇编优化仍不可或缺。本文通过示例代码介绍四种优化技巧:循环展开、寄存器分配、指令重排及SIMD指令使用,显著提升执行效率。同时强调分析性能瓶颈、测试优化效果及保持代码可读性的重要性,助力开发者在关键代码路径上实现性能突破。
54 0
8086 汇编笔记(五):包含多个段的程序
8086 汇编笔记(五):包含多个段的程序
|
4月前
|
C语言
程序技术好文:部分ARM汇编指令解读
程序技术好文:部分ARM汇编指令解读
|
5月前
|
编译器 开发者 C++
8086 汇编笔记(三):第一个程序
8086 汇编笔记(三):第一个程序
|
5月前
|
存储 编译器
C51汇编程序
C51汇编程序
37 5
|
5月前
|
iOS开发 开发者
iOS移动应用程序的备案与SHA-1值查看
iOS移动应用程序的备案与SHA-1值查看
110 2
下一篇
无影云桌面