iOS逆向 04:OC反汇编(上)
2021/7/2 17:21:51
本文主要是介绍iOS逆向 04:OC反汇编(上),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
设置
案例分析
修改1:main中调用
int sum(int a, int b){ return a + b; } int main(int argc, char * argv[]) { sum(1, 2); }
修改2:打印sum的结果
int sum(int a, int b){ return a + b; } int main(int argc, char * argv[]) { int a = sum(1, 2); printf(@"%d", a); }
指针
指针分析
-
问题:a++之后,a是多少?
-
是104,因为指针的自增自减和指向的数据类型宽度有关,即因为a指向的数据是int,int的宽度是4个字节
-
修改1、如果将int改成char,结果是多少呢?
-
因为a指向的数据是char,char的宽度是1个字节
void func(){ char *a; a = (char *)100; a++; printf("%d", a); } <!--打印结果--> 101
- 指针和指针求差值
指针的反汇编
指针的反汇编分析
运行发现是可以的,所以有以下对等关系:
- 运行发现也是可以的
运行发现,崩溃报错:原因是以0作为地址取值,以下是对应的汇编分析
查看汇编代码:
- 查看汇编:
- 以下是func函数的汇编,此时d是取
[x8+0x4]
- 地址的值,因为int是4个字节,
0x4
- 就是
int类型的步长
指针的基本用法-04
-
查看汇编,此时d是取[x8+0x8]地址的值,因为int*是一个指针,占8个字节,0x8就是int*类型的步长
指针的基本用法-05
-
int** 需要拉伸多少个字节?
实际需要3x8=24字节,由于是汇编是16字节对齐,所以需要sub减0x20 -
此时多增加一个int* p2 ,栈空间拉伸多少字节?
发现仍然是0x20指针的基本用法-06
-
再多增加一个char c1呢?
此时超过了32,所以需要再多拉伸16字节指针的基本用法-07
有以下代码
void func(){ int **p1; int c = **p1; }
2、多级指针加法运算
void func(){ char **p1; // char c = p1+2; //此时的+2是 +0x10(执行数据类型是char*) char c = *(*(p1 + 2) + 2);//最外层的+2,是加0x2(执行数据类型是char) }
-
p1[1] 此时的1表示0x8(类型是char*)
-
p1[1][2] 此时的2表示 0x2(类型是char)
多级指针-02
从汇编结果来看p1[1][2]与*(*(p1 + 2) + 2)是等价的
if-else比大小,因为类型是可以相互转换的
这篇关于iOS逆向 04:OC反汇编(上)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-28pyqt 怎么打包整个项目-icode9专业技术文章分享
- 2024-09-28laravel Commands 创建带有参数的 Artisan 命令的步骤和示例-icode9专业技术文章分享
- 2024-09-28antd怎么实现渲染tiff图片-icode9专业技术文章分享
- 2024-09-28英文半角中划线和中文全角的中划线有什么区别-icode9专业技术文章分享
- 2024-09-28nvm npm 和node 他们之间有什么关系-icode9专业技术文章分享
- 2024-09-28Node Version Manager (nvm)使用教程-icode9专业技术文章分享
- 2024-09-28nvm命令太慢,是什么原因-icode9专业技术文章分享
- 2024-09-28Kotlin 如何增加、删除和修改 MutableStateFlow 中的值。-icode9专业技术文章分享
- 2024-09-28Kotlin的stateFlow.update 写法介绍-icode9专业技术文章分享
- 2024-09-28kotlin 怎么获取当前时间格式-icode9专业技术文章分享