美文网首页Arm汇编
iOS逆向之旅(基础篇) — 汇编(二) — 汇编下的 IF语句

iOS逆向之旅(基础篇) — 汇编(二) — 汇编下的 IF语句

作者: 洪呵呵_ | 来源:发表于2018-10-15 18:30 被阅读0次

    我们先根据一段简单的C语言去了解arm64汇编

    原C代码如下:

    void __if__(){
        int value = 5;
        if(value == 3){
            printf("333");
        } else if (value == 4) {
            printf("444");
        } else {
            printf("else");
        }
    }
    

    XCode调试的反汇编代码:

    
    01-汇编-IF-SWITCH`__if__:
        0x104b2a898 <+0>:   sub    sp, sp, #0x20             ; =0x20 
        0x104b2a89c <+4>:   stp    x29, x30, [sp, #0x10]
        0x104b2a8a0 <+8>:   add    x29, sp, #0x10            ; =0x10 
        0x104b2a8a4 <+12>:  mov    w8, #0x5                  // w8 = 5
    ->  0x104b2a8a8 <+16>:  stur   w8, [x29, #-0x4]
        0x104b2a8ac <+20>:  ldur   w8, [x29, #-0x4]
        0x104b2a8b0 <+24>:  cmp    w8, #0x3                  ; w8与3进行比较
        0x104b2a8b4 <+28>:  b.ne   0x104b2a8cc               ; 如果 w8 != 3,则跳转到0x104b2a8cc 
        0x104b2a8b8 <+32>:  adrp   x0, 1
        0x104b2a8bc <+36>:  add    x0, x0, #0xf24            ; x0 -> "333"
        0x104b2a8c0 <+40>:  bl     0x104b2ac0c               ; printf("333");
        0x104b2a8c4 <+44>:  str    w0, [sp, #0x8]
        0x104b2a8c8 <+48>:  b      0x104b2a900               ; <+104> at main.m:22
        0x104b2a8cc <+52>:  ldur   w8, [x29, #-0x4]
        0x104b2a8d0 <+56>:  cmp    w8, #0x4                  ; w8与4进行比较
        0x104b2a8d4 <+60>:  b.ne   0x104b2a8ec               ; 如果 w8 != 4,则跳转到 0x104b2a8ec
        0x104b2a8d8 <+64>:  adrp   x0, 1
        0x104b2a8dc <+68>:  add    x0, x0, #0xf28            ; x0 -> "444"
        0x104b2a8e0 <+72>:  bl     0x104b2ac0c               ; printf("444");
        0x104b2a8e4 <+76>:  str    w0, [sp, #0x4]
        0x104b2a8e8 <+80>:  b      0x104b2a8fc               ; <+100> at main.m
        0x104b2a8ec <+84>:  adrp   x0, 1
        0x104b2a8f0 <+88>:  add    x0, x0, #0xf2c            ; x0 -> "else"
        0x104b2a8f4 <+92>:  bl     0x104b2ac0c               ; printf("else");
        0x104b2a8f8 <+96>:  str    w0, [sp]
        0x104b2a8fc <+100>: b      0x104b2a900               ; <+104> at main.m:22
        0x104b2a900 <+104>: ldp    x29, x30, [sp, #0x10]
        0x104b2a904 <+108>: add    sp, sp, #0x20             ; =0x20 
        0x104b2a908 <+112>: ret  
    

    用一段简单的if-else if-else代码来介绍,汇编下的if语句的实现流程。


    1.png

    我在每句核心的汇编上加了注释,参照着C语言代码,很容易就能看出整段汇编的流程。【里面的adrp指令,你们可能会懵逼,你们暂时只需要知道x0->指向的是什么就好了(代码我已经标明了),后面我会具体解释】

    Xcode下如何查看反汇编

    2.png

    大伙记得真机调试哦,不然不是arm64汇编语言

    资源代码:【https://github.com/qq631192328/CodeReverse

    相关文章

      网友评论

        本文标题:iOS逆向之旅(基础篇) — 汇编(二) — 汇编下的 IF语句

        本文链接:https://www.haomeiwen.com/subject/oyfqzftx.html