跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • Online Tools
  • 用户
  • 群组
折叠
品牌标识

D2Learn Forums

  1. 主页
  2. General Discussion | 综合讨论
  3. 怎么理解aarch64里的堆栈和寄存器?

怎么理解aarch64里的堆栈和寄存器?

已定时 已固定 已锁定 已移动 已解决 General Discussion | 综合讨论
堆栈汇编c代码arm64
3 帖子 2 发布者 80 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • lu9943L 离线
    lu9943L 离线
    lu9943
    写于 最后由 lu9943 编辑
    #1

    在学反汇编遇到堆栈难以理解的问题,我理解的堆栈是:每产生一次函数调用,sub是开辟空间,ADD是释放空间,993c9e68-35b5-4d62-8ba4-901f78fae8dd-7c707f66fc44cc42dd206d4e8970b29.jpg 有一篇文章说:栈向低地址方向生长4eea2fb6-fc96-4dfb-8d36-803f75317a30-image.png ,
    这我就很纳闷了,要是往上生长,那不就是开辟空间是add吗?然后sp不是往上移动了吗?真的被这个绕晕了呀!(文章出处链接文本)
    这是我自己用ndk编译的aarch64平台的代码↓打算练习一下堆栈和寄存器运行原理,有必要纠结堆栈的高低地址和顶部底部吗?我的思路是想弄懂堆栈怎么一回事,然后才能分析寄存器在做什么,左边的汇编代码怎么用图1的方式画出来?有个图我觉得才能理解
    8ba4a676-8b57-4a97-b8a0-77b909c9419f-image.png
    代码

    #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;  
    }
    
    sunrisepeakS 2 条回复 最后回复
    1
    • sunrisepeakS 离线
      sunrisepeakS 离线
      sunrisepeak d2learn-dev
      在 回复了 lu9943 最后由 编辑
      #3

      @lu9943 在 怎么理解aarch64里的堆栈和寄存器? 中说:

      这我就很纳闷了,要是往上生长,那不就是开辟空间是add吗?然后sp不是往上移动了吗?真的被这个绕晕了呀!(文章出处链接文本)

      其实用 往上生长 这个词是不合适的, 因为这设计到 内存图怎么画
      而使用 往低地址生长 进行记忆。 那么:

      • 如果内存图最上面是地址0, 那就是 往上生长
      • 反之, 如果 内存地址0在最下面 那么就是 往下生长

      333561cb-e053-42a0-8ad7-ed23ac3f7933-image.png

      1 条回复 最后回复
      0
      • sunrisepeakS 离线
        sunrisepeakS 离线
        sunrisepeak d2learn-dev
        在 回复了 lu9943 最后由 编辑
        #2

        @lu9943

        提交下面的 帮助按钮有 代码块的语法的提示

        int main() {
            return 0;
        }
        
        1 条回复 最后回复
        0
        • sunrisepeakS 离线
          sunrisepeakS 离线
          sunrisepeak d2learn-dev
          在 回复了 lu9943 最后由 编辑
          #3

          @lu9943 在 怎么理解aarch64里的堆栈和寄存器? 中说:

          这我就很纳闷了,要是往上生长,那不就是开辟空间是add吗?然后sp不是往上移动了吗?真的被这个绕晕了呀!(文章出处链接文本)

          其实用 往上生长 这个词是不合适的, 因为这设计到 内存图怎么画
          而使用 往低地址生长 进行记忆。 那么:

          • 如果内存图最上面是地址0, 那就是 往上生长
          • 反之, 如果 内存地址0在最下面 那么就是 往下生长

          333561cb-e053-42a0-8ad7-ed23ac3f7933-image.png

          1 条回复 最后回复
          0
          • sunrisepeakS sunrisepeak 将这个主题转为问答主题,在
          • sunrisepeakS sunrisepeak 将这个主题标记为已解决,在
          • lu9943L lu9943 将这个主题标记为已解决,在

          • 登录

          • 没有帐号? 注册

          • 登录或注册以进行搜索。
          d2learn forums Powered by NodeBB
          • 第一个帖子
            最后一个帖子
          0
          • 版块
          • 最新
          • 标签
          • 热门
          • Online Tools
          • 用户
          • 群组