发现了一个汇编函数违背了objc_msgsend的参数顺序,这样对吗?

+ (instancetype)dateWithTimeInterval:(NSTimeInterval)secsToBeAdded sinceDate:(NSDate *)date;

这是函数原型,按理说x2 是个NSTimeInterval的参数,可是这里x2是[NSDate date].

另外这里还需要一个参数x3,从反汇编来看,从头到脚都没有x3这个寄存器。这是64位的反汇编。。。

经过测试,这里第二个参数应该是6000秒,也就是100分钟。
假如一个参数是一个宏:#define secsToBeAdded 6000
这样汇编会能看到吗?

1 个赞

我还真没碰到过这类问题;

如果是我的话,可能会尝试2种情况,看看是不是特例,还是有规律的:

  1. 再找(或者自己构造)一个+ (instancetype)dateWithTimeInterval:(NSTimeInterval)secsToBeAdded sinceDate:(NSDate *)date;断下来看看效果;

  2. 找(或者自己构造)一个其他 类函数 看看效果

这里涉及到 NEON 寄存器的问题,第一个参数是存在 d0 寄存器中的,x2 中是第二个参数,NEON可以参考ARM NEON优化(一)——NEON简介及基本架构

2 个赞

@cris 试试看?然后结个帖呗

经测试,确实是d0存放了第二个参数值为6000.