美文网首页从0到1学习Swift
Swift 枚举底层探究

Swift 枚举底层探究

作者: 一粒咸瓜子 | 来源:发表于2022-06-28 10:16 被阅读0次
    • 反汇编: Debug -- Debug Workflow -- Always Show Disassembly
    • 内存视图: Debug -- Debug Workflow -- View Memery

    探究过程

    • 在生成枚举变量处打上断点,运行程序后汇编会断在第7行,根据汇编猜想底层实现:
    movq   $0xa, 0x4942(%rip) // 将0xa(10)存入地址 rip+0x4942
    movq   $0x14, 0x493f(%rip) // 将0x14(20)存入地址 rip+0x493f
    movq   $0x1e, 0x493c(%rip)
    movb   $0x0, 0x493d(%rip)
    

    如何获得 rip 地址:
    注意: rip 作为指令指针,存储着 cpu 下一条要执行的指令的地址,一旦 cpu 读取一条指令,rip会自动指向下一条指令(存储下一条指令的地址)
    a> 看下一条指令的地址,第八行 0x10000373e
    b> 输入 si 单步执行一次,断点停在第8行。并输入 register read rip


    • 验证第一条指令
      使用编程计算器计算内存地址:0x000000010000373e + 0x4942 = 0x100008080,
      在 View Memery 中输入地址验证情况
    • 验证三条 movq 语句
    • 其他信息
      • 通过地址可以看出每条指令所占的空间:0x100003733 ~ 0x10000373e,标明指令 $0xa, 0x4942(%rip) 占12个字节,可以用地址旁边的 <+aa> 减去 上个地址的 <+bb> 来计算指令占的字节数

    相关文章

      网友评论

        本文标题:Swift 枚举底层探究

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