函数的参数和返回值
ARM64下,函数的参数是存放在X0到X7(W0到W7)这8个寄存器里面的.如果超过8个参数,就会入栈.
函数的返回值是放在X0 寄存器里面的.
- 模拟函数的参数和返回值
//
// main.m
// 5.1huibian
//
// Created by 贾元发 on 2018/5/1.
// Copyright © 2018年 贾元发. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int sum(int a, int b){
return a + b;
}
int main(int argc, char * argv[]) {
return 0;
}
- 知道了参数的内存,那么我们可以写一个汇编代码,来验证一下
-suma:
add x0, x0 ,x1
ret
- 调用
- 发现,跟我们猜想的是一样的。
- 那么为什么返回给x0呢而不是x1呢?这是由编译器来决定的。
/**
x0 -- x7 放参数!! 了解这个对今后的逆向分析有什么帮助???
OC方法的调用
[self viewDidLoad];
本质上是不是调用
msgSend(self,@selector(viewDidLoad));
x0 x1 寄存器!!
*/