Lldb单步调试,发现运行结果和实际不符

成功连接手机进行LLDB动态调试,使用si单步之前使用 register read 读取寄存器值为
x0 = 0x0000000196f79880 (void *)0x000001a596f79921
x1 = 0x0000000000000000
x2 = 0x0000000000000000
x3 = 0x000000016fd6e0e0
x4 = 0x0000000000000010
x5 = 0x000000016fd6db3c
x6 = 0x0000000000000000
x7 = 0x000000016fd6dc9c
x8 = 0x0000000104810000 “lastPathComponent”
x9 = 0x0000000000000015
x10 = 0x0000000196cc7120 CoreFoundation__CFRuntimeObjCClassTable x11 = 0x000000230000003f x12 = 0x00000001482b4580 x13 = 0x000001a596cbaa49 x14 = 0x0000910a0cfb8b96 x15 = 0x00000000000000c8 x16 = 0x0000000195fea4d8 libobjc.A.dylibobject_getClass
x17 = 0x0000000184276534 CoreFoundation-[__NSCFBoolean retain] x18 = 0x0000000000000000 x19 = 0x00000001048a1000 x20 = 0x0000000196cbd300 _MergedGlobals + 16 x21 = 0x0000000000000003 x22 = 0x0000000000000001 x23 = 0x0000000000000001 x24 = 0x0000000000000000 x25 = 0x0000000196cbd2f0 _MergedGlobals x26 = 0x0000000196cbb790 (void *)0x000001a596cbb741 x27 = 0x0000000196cbd300 _MergedGlobals + 16 x28 = 0x00000001895c8496 "numberWithBool:" fp = 0x000000016fd6e830 lr = 0x00000001033d73f4 Aweme___lldb_unnamed_symbol257590$$Aweme + 3232
sp = 0x000000016fd6e240
pc = 0x00000001033d7404 Aweme`___lldb_unnamed_symbol257590$$Aweme + 3248
cpsr = 0x60000000

之后执行si单步
(lldb) ni
Process 10162 stopped

  • thread #1, queue = ‘com.apple.main-thread’, stop reason = instruction step over
    frame #0: 0x00000001033d7408 Aweme___lldb_unnamed_symbol257590$$Aweme + 3252 Aweme___lldb_unnamed_symbol257590$$Aweme:
    → 0x1033d7408 <+3252>: mov x2, x21
    0x1033d740c <+3256>: bl 0x1034fadd4 ; symbol stub for: objc_msgSend
    0x1033d7410 <+3260>: mov x28, x0
    0x1033d7414 <+3264>: mov x0, x28
    Target 0: (Aweme) stopped.
    之后发现读取所有寄存器
    (lldb) register read
    General Purpose Registers:
    x0 = 0x0000000196f79880 (void *)0x000001a596f79921
    x1 = 0x00000001895cf8a4 “numberWithLongLong:”
    x2 = 0x0000000000000000
    x3 = 0x000000016fd6e0e0
    x4 = 0x0000000000000010
    x5 = 0x000000016fd6db3c
    x6 = 0x0000000000000000
    x7 = 0x000000016fd6dc9c
    x8 = 0x0000000104810000 “lastPathComponent”
    x9 = 0x0000000000000015
    x10 = 0x0000000196cc7120 CoreFoundation__CFRuntimeObjCClassTable x11 = 0x000000230000003f x12 = 0x00000001482b4580 x13 = 0x000001a596cbaa49 x14 = 0x0000910a0cfb8b96 x15 = 0x00000000000000c8 x16 = 0x0000000195fea4d8 libobjc.A.dylibobject_getClass
    x17 = 0x0000000184276534 CoreFoundation-[__NSCFBoolean retain] x18 = 0x0000000000000000 x19 = 0x00000001048a1000 x20 = 0x0000000196cbd300 _MergedGlobals + 16 x21 = 0x0000000000000003 x22 = 0x0000000000000001 x23 = 0x0000000000000001 x24 = 0x0000000000000000 x25 = 0x0000000196cbd2f0 _MergedGlobals x26 = 0x0000000196cbb790 (void *)0x000001a596cbb741 x27 = 0x0000000196cbd300 _MergedGlobals + 16 x28 = 0x00000001895c8496 "numberWithBool:" fp = 0x000000016fd6e830 lr = 0x00000001033d73f4 Aweme___lldb_unnamed_symbol257590$$Aweme + 3232
    sp = 0x000000016fd6e240
    pc = 0x00000001033d7408 Aweme`___lldb_unnamed_symbol257590$$Aweme + 3252
    cpsr = 0x60000000
    对比发现 寄存器x0和x28的值并不相同。实在是不明白为什么会出现这种情况。

晕了,发帖之后不能再次编辑啊! 这帖子格式看着有点乱
从新捋一下
执行单步之前
x0 = 0x0000000196f79880 (void *)0x000001a596f79921
。。。。。
x28 = 0x00000001895c8496 “numberWithBool:”
然后执行单步
0x1033d7410 <+3260>: mov x28, x0
0x1033d7414 <+3264>: mov x0, x28
Target 0: (Aweme) stopped.
此时观察 寄存器x28和x0
x0 = 0x0000000196f79880 (void *)0x000001a596f79921
。。。。。
x28 = 0x00000001895c8496 “numberWithBool:”
感觉汇编指令并没有执行,请教前辈,这是什么原因,有什么解决办法么。

问题解决,小白了。我以为运行的是最下面一行代码那,实际不是。

还是不对,像这种 mov A,B然后mov B,A的几个地方都不对