1625-5 王子昂 总结《2018年1月4日》 【连续第461天总结】
A. ARM调用约定
B.
ARM汇编中规定:R0-R3这4个寄存器用来传递函数调用的第1到第4个参数,超出的参数通过堆栈来传递。R0寄存器同时用来存放函数调用的返回值。被调用的函数在返回前无需恢复这些寄存器的内容。
知道这一点就可以回头去搞DebugMe那里IDA解析错误的函数了
先回忆一下该函数:
可以看到v10是不明来由的,事实上是因为在汇编状态下,返回值理应由r0传递
但是在(又调用了一个子函数,只是包装的)sub_EAC中,调用完子函数后将R0赋值给了r1,使得在外部将r1赋给v3(即r7)时IDA不知道r1是哪来的
这是一个不符合调用约定的行为
那么分析ARM汇编
.text:00000D44 MULS R0, R3