Tag Archives: 栈帧

ARM64中函数调用的基本过程

1、C语言代码

1
2
3
4
5
6
7
8
9
10
//
//  main.m
//  lldb
//
//  Created by 余西安 on 2018/11/1.
//  Copyright © 2018 yusian. All rights reserved.
//
 
void func()
{[......]<p class="read-more"><a href="https://www.yusian.com/blog/assembler/2018/11/07/1648581365.html">继续阅读</a></p>

函数调用原理–完善篇(栈帧)

1、参考链接:
1.1 函数调用原理–参数篇
1.2 函数调用原理–局部变量

2、局部变量空间分配后没有初始化,可能会出现异常访问而出现不可预知的错误,因为分配的临时空间必须初始化;
2.1、将每个字节都初始化为CC其中一种安全策略,因为CC在汇编指令中为int 3,即中断指令。
2.2、stosb/stosw指定能将es:di指向的空间写入ax寄存器中的值,并在执行结束后将di自加1字节/2字节
2.3、rep会循环指定后一条指令,循环次数从cx寄存器中取,如果为0则退出循环

3、汇编代码实现[……]

继续阅读