64位下,使用‘ aslr offset + 符号基地址’ 得到 地址下断点后,为什么还是有512字节的偏移?

比如,我打算到一个VC的viewDidLoad 这里下个断点,符号基地址在hopper中显示如下:

第一条指令地址是“0x00000001000d7b14”.

使用image list -o -f 获得模块的aslr 偏移是“0x00000000000cc000”。如图:

然后,我就在 “0x00000000000cc000+0x00000001000d7b14” 处下了个断点。

进入该VC就会触发断点:

从第一个栈帧frame #0 ,可以看到,断点停在了离我想要的地方偏移了 512个字节。在这里x0,x1 寄存器的值已经别修改过了,不会是我们想要的class, sel 了。

我把上面的断点地址-512得到新的断点地址,下断后,成功的打印了class,sel。如图:

我的问题是,为什么还偏移了512个字节了呢?

这是因为viewDidLoad这个方法编译后成为objc_msgSend()以后产生的编译位移吗?

我从来没有碰到过这种情况,别的app也这样吗?

我多试几个app再回来反馈

用了最新的Clutch 脱壳,现在对上了 。但我用 dumpdecrypted 脱壳以后,断点也不成功,感觉是 dumpdecrypted 把 二进制的文件里的 __text 段的数据搞坏了,导致读出来的偏移量不对,最起码跟Clutch脱壳以后的二进制文件对比,符号的偏移就不一样了。