怎么理解aarch64里的堆栈和寄存器?
已锁定
已解决
General Discussion | 综合讨论
-
在学反汇编遇到堆栈难以理解的问题,我理解的堆栈是:每产生一次函数调用,sub是开辟空间,ADD是释放空间, 有一篇文章说:栈向低地址方向生长 ,
这我就很纳闷了,要是往上生长,那不就是开辟空间是add吗?然后sp不是往上移动了吗?真的被这个绕晕了呀!(文章出处链接文本)
这是我自己用ndk编译的aarch64平台的代码↓打算练习一下堆栈和寄存器运行原理,有必要纠结堆栈的高低地址和顶部底部吗?我的思路是想弄懂堆栈怎么一回事,然后才能分析寄存器在做什么,左边的汇编代码怎么用图1的方式画出来?有个图我觉得才能理解
代码#include <stdio.h> #include <string.h> int main() { char password[10]; while (1) { printf("请输入卡密: "); scanf("%9s", password); // 限制输入长度,防止缓冲区溢出 if (strcmp(password, "123") == 0) { printf("登录成功!\n"); break; } else { printf("密码错误,请重新输入。\n"); } } return 0; }
-
@lu9943 在 怎么理解aarch64里的堆栈和寄存器? 中说:
这我就很纳闷了,要是往上生长,那不就是开辟空间是add吗?然后sp不是往上移动了吗?真的被这个绕晕了呀!(文章出处链接文本)
其实用 往上生长 这个词是不合适的, 因为这设计到 内存图怎么画
而使用 往低地址生长 进行记忆。 那么:- 如果内存图最上面是地址0, 那就是 往上生长
- 反之, 如果 内存地址0在最下面 那么就是 往下生长
-
-
@lu9943 在 怎么理解aarch64里的堆栈和寄存器? 中说:
这我就很纳闷了,要是往上生长,那不就是开辟空间是add吗?然后sp不是往上移动了吗?真的被这个绕晕了呀!(文章出处链接文本)
其实用 往上生长 这个词是不合适的, 因为这设计到 内存图怎么画
而使用 往低地址生长 进行记忆。 那么:- 如果内存图最上面是地址0, 那就是 往上生长
- 反之, 如果 内存地址0在最下面 那么就是 往下生长
-
-
-