其他分享
首页 > 其他分享> > iOS开发逆向之循环选择指针(下)

iOS开发逆向之循环选择指针(下)

作者:互联网

本文主要讲解Switch的汇编代码

fdf696ff3d4931225c290f86c439d7da.png


Switch

案例分析

首先作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS开发交流群:130595548,不管你是小白还是大牛都欢迎入驻 ,让我们一起进步,共同发展!(群内会免费提供一些群主收藏的免费学习书籍资料以及整理好的几百道面试题和答案文档!)

1、当case有3个时

void func(int a){    switch (a) {        case 1:            printf("打坐");            break;        case 2:            printf("加红");            break;        case 3:            printf("加蓝");            break;        default:            printf("啥也不干");            break;
    }
}int main(int argc, char * argv[]) {

    func(1);

2、如果是4个case呢?

void func(int a){    switch (a) {        case 1:            printf("打坐");            break;        case 2:            printf("加红");            break;        case 3:            printf("加蓝");            break;        case 4:            printf("打怪");            break;        default:            printf("啥也不干");            break;
    }
}int main(int argc, char * argv[]) {

    func(1);
}

3、修改案例

void func(int a){    switch (a) {        case 5:            printf("打坐");            break;        case 6:            printf("加红");            break;        case 7:            printf("加蓝");            break;        case 8:            printf("打怪");            break;        default:            printf("啥也不干");            break;
    }
}int main(int argc, char * argv[]) {
    func(4);
}

其汇编如下,发现subs减的是5

76a0deb15fbfd40b62f08eb27b0674d1.webp

4、修改2:将第二个case修改为2

void func(int a){    switch (a) {        case 5:            printf("打坐");            break;        case 2:            printf("加红");            break;        case 7:            printf("加蓝");            break;        case 8:            printf("打怪");            break;        default:            printf("啥也不干");            break;
    }
}

汇编如下,从这里可以发现,subs后减的是最小的case

00ad6ee6a5438ffd87e2590e410071eb.webp

分析

switch总结

如果case很大呢?

void func(int a){    switch (a) {        case 1:            printf("打坐");            break;        case 400:            printf("加红");            break;        case 800:            printf("加蓝");            break;        case 8:            printf("打怪");            break;        default:            printf("啥也不干");            break;
    }
}int main(int argc, char * argv[]) {
    func(4);
}

7a6a1e9c602395e3dbd84665c7494f28.webp

首先作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS开发交流群:130595548,不管你是小白还是大牛都欢迎入驻 ,让我们一起进步,共同发展!(群内会免费提供一些群主收藏的免费学习书籍资料以及整理好的几百道面试题和答案文档!)

总结


标签:case,逆向,int,iOS,break,default,x9,printf,指针
来源: https://blog.51cto.com/u_15146321/2759553