关于hopper汇编的结果我有几个不解请哪位大神解惑一下

###我写了下面的代码

- (int)my_test:(int)sender {
    NSMutableDictionary *dic1 = [NSMutableDictionary new];
    NSMutableDictionary *dic2 = [NSMutableDictionary new];
    [dic2 setObject:@"wode" forKey:@"name"];
    [dic1 setObject:@"test" forKey:@"value"];
    int temp = 2;
    [dic1 setObject:@(temp+sender) forKey:@"value1"];
    return 2;
}

###通过hopper之后

000000010000ef04         stp        x29, x30, [sp, #0xfffffff0]!                ; Objective C Implementation defined at 0x100034138 (instance)
000000010000ef08         mov        x29, sp
000000010000ef0c         sub        sp, sp, #0x50
000000010000ef10         adrp       x8, #0x100037000
000000010000ef14         add        x8, x8, #0x978                              ; @selector(new)
000000010000ef18         adrp       x9, #0x100038000                            ; @selector(secondAttribute)
000000010000ef1c         add        x9, x9, #0x778                              ; objc_cls_ref_NSMutableDictionary
000000010000ef20         stur       x0, [x29, #0xfffffff8]
000000010000ef24         stur       x1, [x29, #0xfffffff0]
000000010000ef28         stur       w2, [x29, #0xffffffec]
000000010000ef2c         ldr        x9, [x9]
000000010000ef30         ldr        x1, [x8]
000000010000ef34         mov        x0, x9
000000010000ef38         bl         imp___stubs__objc_msgSend
000000010000ef3c         adrp       x8, #0x100037000
000000010000ef40         add        x8, x8, #0x978                              ; @selector(new)
000000010000ef44         adrp       x9, #0x100038000                            ; @selector(secondAttribute)
000000010000ef48         add        x9, x9, #0x778                              ; objc_cls_ref_NSMutableDictionary
000000010000ef4c         stur       x0, [x29, #0xffffffe0]
000000010000ef50         ldr        x9, [x9]
000000010000ef54         ldr        x1, [x8]
000000010000ef58         mov        x0, x9
000000010000ef5c         bl         imp___stubs__objc_msgSend
000000010000ef60         adrp       x8, #0x100030000
000000010000ef64         add        x8, x8, #0xcd0                              ; @"wode"
000000010000ef68         adrp       x9, #0x100030000
000000010000ef6c         add        x9, x9, #0xcf0                              ; @"name"
000000010000ef70         adrp       x1, #0x100037000
000000010000ef74         add        x1, x1, #0xe20                              ; @selector(setObject:forKey:)
000000010000ef78         str        x0, [sp, #0x28]
000000010000ef7c         ldr        x0, [sp, #0x28]
000000010000ef80         ldr        x1, [x1]
000000010000ef84         mov        x2, x8
000000010000ef88         mov        x3, x9
000000010000ef8c         bl         imp___stubs__objc_msgSend
000000010000ef90         adrp       x8, #0x100030000
000000010000ef94         add        x8, x8, #0xd10                              ; @"test"
000000010000ef98         adrp       x9, #0x100030000
000000010000ef9c         add        x9, x9, #0xd30                              ; @"value"
000000010000efa0         adrp       x0, #0x100037000
000000010000efa4         add        x0, x0, #0xe20                              ; @selector(setObject:forKey:)
000000010000efa8         ldur       x1, [x29, #0xffffffe0]
000000010000efac         ldr        x0, [x0]
000000010000efb0         str        x0, [sp, #0x18]
000000010000efb4         mov        x0, x1
000000010000efb8         ldr        x1, [sp, #0x18]
000000010000efbc         mov        x2, x8
000000010000efc0         mov        x3, x9
000000010000efc4         bl         imp___stubs__objc_msgSend
000000010000efc8         adrp       x8, #0x100037000
000000010000efcc         add        x8, x8, #0xbf0                              ; @selector(numberWithInt:)
000000010000efd0         adrp       x9, #0x100038000                            ; @selector(secondAttribute)
000000010000efd4         add        x9, x9, #0x810                              ; objc_cls_ref_NSNumber
000000010000efd8         orr        w10, wzr, #0x2
000000010000efdc         str        w10, [sp, #0x24]
000000010000efe0         ldur       x0, [x29, #0xffffffe0]
000000010000efe4         ldr        x9, [x9]
000000010000efe8         ldr        w10, [sp, #0x24]
000000010000efec         ldur       w11, [x29, #0xffffffec]
000000010000eff0         add        w2, w10, w11
000000010000eff4         ldr        x1, [x8]
000000010000eff8         str        x0, [sp, #0x10]
000000010000effc         mov        x0, x9
000000010000f000         bl         imp___stubs__objc_msgSend                   ; XREF=-[QSLayoutConstraint remove]+56, -[QSLayoutConstraint change]+56, -[QSLayoutConstraint equal]+56, -[QSLayoutConstraint lessThanOrEqual]+56, -[QSLayoutConstraint greaterThanOrEqual]+56, -[QSLayoutConstraint multiplied]+56
000000010000f004         mov        x29, x29
000000010000f008         bl         imp___stubs__objc_retainAutoreleasedReturnValue
000000010000f00c         adrp       x8, #0x100030000
000000010000f010         add        x8, x8, #0xd50                              ; @"value1"
000000010000f014         adrp       x9, #0x100037000
000000010000f018         add        x9, x9, #0xe20                              ; @selector(setObject:forKey:)
000000010000f01c         mov        x1, x0
000000010000f020         ldr        x9, [x9]
000000010000f024         ldr        x3, [sp, #0x10]
000000010000f028         str        x0, [sp, #0x8]
000000010000f02c         mov        x0, x3
000000010000f030         str        x1, [sp]
000000010000f034         mov        x1, x9
000000010000f038         ldr        x2, [sp]
000000010000f03c         mov        x3, x8
000000010000f040         bl         imp___stubs__objc_msgSend
000000010000f044         ldr        x0, [sp, #0x8]
000000010000f048         bl         imp___stubs__objc_release
000000010000f04c         movz       x8, #0x0
000000010000f050         add        x9, sp, #0x28
000000010000f054         mov        x0, x9
000000010000f058         mov        x1, x8
000000010000f05c         bl         imp___stubs__objc_storeStrong
000000010000f060         movz       x8, #0x0
000000010000f064         sub        x9, x29, #0x20
000000010000f068         mov        x0, x9
000000010000f06c         mov        x1, x8
000000010000f070         bl         imp___stubs__objc_storeStrong
000000010000f074         orr        w0, wzr, #0x2
000000010000f078         mov        sp, x29
000000010000f07c         ldp        x29, x30, [sp], #0x10
000000010000f080         ret        
                       ; endp

###这里我有几个不解的

  • 1.000000010000f000 这内存地址的代码他是怎么解析的为什么他写的根本不对啊虽然我项目里有这些类但是这个方法根本没有使用是不是我设置的不对
  • 2.如何知道name这个key是设置给第一个生成的NSMutableDictionary对象还是第二个
  • 3.如果确定value1这个key的值因为这之中有新声明了个变量而且加上原有变量的
  • 4.变量声明之后不是会给他一个内存空间吗 这怎么确定的 我怎么知道对象在哪里
  • 5.在执行一个方法之后如果有返回值他存储在哪里

hello,书看完了吗,哈

你指的是《iOS应用逆向工程(第2版)》是这本书吧,在这之前我没认真看只看了“Characount for Notes 8
”这个例子。我今天花了一天时间去看了这本书我已经基本能读懂我上面的汇编代码了。谢谢你


加油:fuelpump: