关于书上的偏移后的模块地址?

一般按照书上的操作是:偏移后的模块基地址 = 偏移前的模块基地址 + ASLR偏移

但是我遇到一个例子:
这是按照_shortMethodDescription得出的正确地址:

如果按照公式来的话,0xdc000是ASLR偏移 + 偏移前基地址 = 0x000123328.
而正确的地址是:0x100120598。

我有点懵!!这个地址是怎么算出来的啊

我怎么又预感…64 v7的缘故呢:slight_smile:

1 个赞

啊。这还有关系吗?确实是,我hooper是v7的,lldb是64的。:fearful: 果然实践出真知啊!!!可是我看不懂arm64的反汇编:joy:

你反汇编的和运行的都不是一个东西了呀…还怎么算? arm64和v7 差不多呀…

那还支持这样的理论吗? 参数放在x0~x3,其他放在栈中?返回值放在x0中吗?
而且arm64的反汇编看起来比arm7的少了好多。。。。

x0-x7 其余的是stack ,返回x0。
其他的指令差不多吧,我也没细研究了

不只是64和v7那么简单吧,不同系统的偏移量也不一定一样,只需要保证自己运行的系统跟hooper分析的系统一致就好,那么问题来了,如果有些没有越狱的手机怎么去获取framework?你可能会想到从固件里面获取,但是固件里面分析出来的应该也有问题。

是的,就是64和7的关系。

哦豁,好吧,你说是就是。

是我自己试验出来的,不是我说是就是的。我没这么大本事

那你试验过都是64位的ios9跟ios10的偏移量是一样的么?

现在不是机型或者系统的偏移量的问题。即使同一个机型同一个系统,app在不同时刻启动ASLR都不一样的。
现在的问题是,我hooper分析的armv7,而我机子lldb的64,导致ASLR是64位的ASLR。至于为什么一个7和64为什么对应不起来,我就不懂了。。。