汇编八

作者: Flonger | 来源:发表于2017-07-22 01:06 被阅读38次

swift中去掉了自增自减符号(++,--)

  • 原因:
  • ++:
DEBUG:
        int a = 10;
        ++a;
        int c = a;
        /*
         0x100c2074b <+27>:  movl   $0xa, -0x14(%rbp)
         0x100c20752 <+34>:  movl   -0x14(%rbp), %edi
         0x100c20755 <+37>:  addl   $0x1, %edi
         0x100c20758 <+40>:  movl   %edi, -0x14(%rbp)
     ->  0x100c2075b <+43>:  movl   -0x14(%rbp), %edi
         0x100c2075e <+46>:  movl   %edi, -0x18(%rbp)
         */

        int a = 10;
        int b = ++a + ++a + ++a; //面试题 没答案  看cpu、编译器
        /*
         0x10ed8473b <+27>:  movl   $0xa, -0x14(%rbp)       ;a = 10
     ->  0x10ed84742 <+34>:  movl   -0x14(%rbp), %edi       ;di = 10
         0x10ed84745 <+37>:  addl   $0x1, %edi              ;di = 10 + 1 = 11
         0x10ed84748 <+40>:  movl   %edi, -0x14(%rbp)       ;a = 11
         0x10ed8474b <+43>:  movl   -0x14(%rbp), %ecx       ;cx = 11
         0x10ed8474e <+46>:  addl   $0x1, %ecx              ;cx = 11 + 1 = 12
         0x10ed84751 <+49>:  movl   %ecx, -0x14(%rbp)       ;a = 12
         0x10ed84754 <+52>:  addl   %ecx, %edi              ;di = 12 + 11 = 23
         0x10ed84756 <+54>:  movl   -0x14(%rbp), %ecx       ;cx = 12
         0x10ed84759 <+57>:  addl   $0x1, %ecx              ;cx = 13
         0x10ed8475c <+60>:  movl   %ecx, -0x14(%rbp)       ;a = 13
         0x10ed8475f <+63>:  addl   %ecx, %edi              ;di = 23 + 13 = 36
         0x10ed84761 <+65>:  movl   %edi, -0x18(%rbp)       ;b = 36
         */
  • +=:
        int a = 10;
        a+=1;
        int c = a;
        
        /*
         0x10810874b <+27>:  movl   $0xa, -0x14(%rbp)
         0x108108752 <+34>:  movl   -0x14(%rbp), %edi
         0x108108755 <+37>:  addl   $0x1, %edi
         0x108108758 <+40>:  movl   %edi, -0x14(%rbp)
     ->  0x10810875b <+43>:  movl   -0x14(%rbp), %edi
         0x10810875e <+46>:  movl   %edi, -0x18(%rbp)
         */

OC: Release模式下:

  • Xcode 函数可以优化,但是方法不可以优化。
  • 方法全是运行时。

一个函数内部不在调用其他函数的话,直接调用bp-n,这块区域叫做红色区域(不改变sp,快)

  • 红色区域默认区域大小:128字节
  • 当红色区域不够用的话,照样会sp - n。

栈帧:

一个函数调用时候sp和bp之间的空间


栈帧

参数过多的情况:

分析此代码汇编过程
01
02
03
04
05

基地址和偏移地址:

执行指令的时候,ip先+1,再去执行 无论怎么执行,偏移地址都有一样
传说中的基址

数据对应的地址是不会变:偏移地址

内存1 内存2

有待补充。。。。。。

判断条件的判断 标记寄存器,条件判断

以上

相关文章

  • <安全攻防之汇编基础>

    &关于汇编基础请点击 <汇编一> <汇编二> <汇编三> <汇编四> <汇编五> <汇编六> <汇编七> <汇编八...

  • 汇编八

    swift中去掉了自增自减符号(++,--) 原因: ++: +=: OC: Release模式下: Xcode ...

  • 汇编(八)

    现场保护 平栈内:外平栈.png *现场保护 函数调用 xcode函数汇编

  • 汇编基础(八) if、循环的汇编识别

    描述 验证if、循环、switch在汇编当中是怎么表示的 if 的汇编 新建的工程 源代码 汇编的代码 ext:0...

  • 汇编八、循环&选择

    CMP(compare)比较指令 CMP把一个寄存器的内容和另一个寄存器的内容或立即数进行比较。但不存储结果,只是...

  • iOS逆向学习(arm64汇编入门)

    iOS汇编 iOS汇编语音有很多钟。常见的有8086汇编、arm汇编、x86汇编等等。 arm汇编 iOS的架构从...

  • ARM64汇编入门 - 汇编基础

    ARM64汇编入门 - 汇编基础ARM64汇编入门 - 汇编基础

  • 2021-02-20第8章汇编测试题目

    第8章汇编测试题目 共4道单选题目 【王爽-汇编语言】第八章检测题分析 _fcrane学习博客-CSDN博客 ht...

  • 逆向笔记(三)-汇编指令

    汇编指令 针对汇编来说,汇编指令是必须了解的,而且汇编中汇编指令比较多,但是每一个汇编指令对应的机器码是固定不变的...

  • 汇编语言如何与高级语言混编

    汇编混编的两种方式(内联汇编 和 外链汇编) 内联汇编 asm();这是内联汇编,编译器可以直接运行asm ( 汇...

网友评论

      本文标题:汇编八

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