美文网首页
iOS项目查看汇编代码

iOS项目查看汇编代码

作者: 夜凉听风雨 | 来源:发表于2022-03-30 21:29 被阅读0次

一、显示汇编

正常我们在代码处打上断点,运行到断点处就会显示我们写的代码,想要看到汇编代码需要做以下设置。

勾选上xcode顶部 Debug -> Debug Workflow -> Always Show Disassembly即可看到如下图所示汇编代码。

汇编代码.png

①:表示每一行汇编代码的地址
②:表示每一行汇编代码与第一行代码地址相差多少个字节
③:表示汇编指令操作符
④:汇编指令操作的对象

二、查看内存

勾选上xcode顶部 Debug -> Debug Workflow -> View Memory 即可看到如下图所示的界面。
在此界面输入地址,就可以查看到地址对应的内存中的内容

查看内存界面.png

下面我输入一个地址查看到内存中对应的值是0x0A也就是10

内存对应内容.png

三、常用lldb指令

1.读取寄存器的值

  • register read [寄存器名称] 读取某个寄存器的值
    register read rax 打印结果:rax = 0x0000000100008018

  • register read 读取所有寄存器
    register read 打印结果:

General Purpose Registers:
       rax = 0x0000000100008018  swiftTest`swiftTest.a : Swift.Int
       rbx = 0x0000000000000000
       rcx = 0x0000000000000000
       rdx = 0x00007ffeefbff4c8
       rdi = 0x0000000000000001
       rsi = 0x00007ffeefbff4b8
       rbp = 0x00007ffeefbff490
       rsp = 0x00007ffeefbff430
        r8 = 0x0000000000000000
        r9 = 0x0000000000000000
       r10 = 0x0000000000000000
       r11 = 0x0000000000000000
       r12 = 0x0000000000000000
       r13 = 0x0000000000000000
       r14 = 0x0000000000000000
       r15 = 0x0000000000000000
       rip = 0x0000000100003eea  swiftTest`main + 42 at main.swift:12:9
    rflags = 0x0000000000000246
        cs = 0x000000000000002b
        fs = 0x0000000000000000
        gs = 0x0000000000000000

2.修改寄存器的值

  • register write [寄存器名称] [值]
    register write rax 0x0002135ab34 把5这个数写入寄存器rax

3.读取内存中的值

x/数量-格式-字节大小 内存地址

x 0x0000000100003edc 打印结果:

0x100003edc: 48 c7 05 39 41 00 00 14 00 00 00 89 7d cc 48 89  H..9A.......}.H.
0x100003eec: c7 48 8d 45 e8 48 89 75 c0 48 89 c6 ba 20 00 00  .H.E.H.u.H... ..

x/3xw 0x0000000100003edc 打印结果:

0x100003edc: 0x3905c748 0x14000041 0x89000000

4.修改内存中的值

memory write [内存地址] [数值]
memory write 0x0000010 10

5.格式

x是16进制, f是浮点,d是十进制

6.字节大小

b - byte 1字节
h - half word 2字节
w - word 4字节
g - giant word 8字节

7.表达式

expression [表达式] 可以简写为 expr [表达式]

expression a = 10
expr b = 3

8.po表达式

po/格式 [对象]
po age
po/d age

9.断点调试

  • thread step-over、next、 n(三种写法一样)
    单步运行,把子函数当做整体一步执行 (源码级别)
  • thread step-in、step、 S(三种写法一样)
    单步运行,遇到子函数会进入子函数(源码级别)
  • thread step-inst-over、nexti、 ni(三种写法一样)
    单步运行,把子函数当做整体一步执行 (汇编级别)
  • thread step-inst、stepi、 si(三种写法一样)
    单步运行,遇到子函数会进入子函数(汇编级别)
  • thread step-out、finish(两种写法一样)
    直接执行完当前函数的所有代码,返回到上一个函数(遇到断点会卡住)

相关文章

网友评论

      本文标题:iOS项目查看汇编代码

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