当前位置: 首页 > news >正文

【软件安全】ARM64、x86、32 位与 64 位架构的区别、定义、应用背景

ARM64、x86、32 位与 64 位架构的区别、定义、应用背景软件安全实验(栈溢出、ASLR、缓冲区攻击等)


一、架构定义与关系

1. x86

  • 定义:最初由 Intel 8086/80386 演变而来的一系列指令集架构(ISA)。

  • 特点

    • 最初是 16 位,后来发展为 32 位(IA-32),再发展为 64 位(x86-64 / AMD64)。
    • 使用寄存器命名如 eax, ebx, esp, ebp, eip(32 位),在 64 位扩展为 rax, rsp, rbp, rip
  • 应用:PC、服务器的主流架构,尤其在 安全课程里常用来教学栈溢出和内存漏洞,因为教材和工具链成熟。


2. ARM / ARM64 (aarch64)

  • 定义:ARM 是 RISC(精简指令集计算机),ARM64 指的是其 64 位架构(正式名 AArch64)。

  • 特点

    • 移动设备、嵌入式、苹果 M1/M2 芯片都在用。
    • 寄存器统一为 64 位:x0 ~ x30sp(栈指针),x29(帧指针),x30(返回地址)。
    • 指令更简洁,能效比高。
  • 应用:智能手机(Android/iOS)、树莓派、苹果 Macbook (M1/M2/M3),以及部分云计算服务器。


3. 32 位 vs 64 位

  • 32 位:寄存器宽度为 32 位,寻址空间最大约 4GB。

  • 64 位:寄存器宽度 64 位,理论寻址空间可达 16EB。

  • 区别

    • 指针大小不同(32 位 4 字节,64 位 8 字节),影响栈布局、内存对齐。
    • 函数调用约定不同:x86 常用栈传参,ARM64 和 x86-64 常用寄存器传参。
    • 安全机制不同:64 位系统更容易启用 NX/DEP、ASLR、栈保护等现代防护。

二、在软件安全中的应用

1. 为什么教材多用 x86/32 位?

  • 32 位下的栈布局更简单,ebp/eip 连续保存在栈中,容易被溢出覆盖。
  • 攻击演示(如覆盖返回地址 → 跳转到 shellcode)更直观。
  • 很多经典漏洞利用手法(ret2libc、ROP)最早就是基于 IA-32 研究的。

2. ARM64 下的不同点

  • 没有 eip/esp/ebp,取而代之的是 pc/sp/x29/x30
  • 返回地址存在寄存器 x30 (LR),而不是直接压栈,这意味着溢出模式和保护机制不同。
  • ASLR/DEP 更常开,在 ARM64 上教材里的简单攻击往往会触发 “Bus error” 而不是 “Segmentation fault”。

3. 64 位安全机制增强

  • 更强的 ASLR:地址空间更大,随机化效果更好。
  • 更复杂的 ABI:函数调用用寄存器传参,减少了栈上的可控数据,降低了栈溢出的成功率。
  • 现代编译器默认防护:例如 -fstack-protector-pie 默认开启,需要显式关掉才能复现实验。

三、背景与应用场景

  1. 教学/研究

    • 大学课程和教材(比如你在 IFN657 课程做的实验)常要求用 32 位 x86,因为漏洞利用的原理更容易演示。
    • 但现在很多学生用 ARM Mac,只能借助虚拟机/交叉编译来还原 x86 环境。
  2. 现实中的软件安全

    • 现代系统(Windows 10/11、Linux 64 位、iOS、Android)基本都是 64 位。
    • 漏洞利用在 64 位下更复杂(需要绕过 ASLR/DEP/Stack Canary)。
    • ARM64 由于在手机普及,成为移动安全研究的重要对象(恶意 app、越狱、内核漏洞)。
  3. 攻防对抗

    • 攻击者会研究不同架构的调用约定、内存布局,以设计特定的 exploit。
    • 防御者利用 64 位环境的安全特性提高攻击难度。

四、总结对比表

架构位宽典型寄存器应用安全实验中的表现
x86 (IA-32)32eax, ebx, ecx, edx, esp, ebp, eipPC,教材实验栈溢出容易覆盖 eip,实验直观
x86-64 (AMD64)64rax, rbx, rsp, rbp, ripPC,服务器默认安全机制更强,利用更难
ARM3232r0-r12, sp, lr, pc旧手机/嵌入式栈溢出可能覆盖 lr(返回地址)
ARM64 (AArch64)64x0-x30, sp, x29(fp), x30(lr), pc手机、Mac M1/M2/M3返回地址在 x30,保护更多,常见崩溃是 Bus error

http://www.xdnf.cn/news/1358317.html

相关文章:

  • 安装gitlab
  • Dify 从入门到精通(第 53/100 篇):Dify 的分布式架构(进阶篇)
  • 线程整理文档
  • git学习
  • Wagtail CRX 的 Latest Pages Block 高级设置 模版v3.0 以后被阉割了
  • Vue vs React:前端框架的差异与选择
  • 【SpringBoot集成篇】SpringBoot 深度集成 Elasticsearch 搜索引擎指南
  • 代码性能测试——benchmark库
  • 基于Spring Boot与Redis的电商场景面试问答解析
  • Python训练营打卡 DAY 46 通道注意力(SE注意力)
  • 【数据结构】排序算法全解析
  • Linux服务实验
  • [论文阅读] 软件工程 | GPS算法:用“路径摘要”当向导,软件模型检测从此告别“瞎找bug”
  • Kaggle项目:一次 Uber 出行数据分析的完整思路
  • 【机器学习】 11 Mixture models and the EM algorithm
  • 如何捕获组件的异常情况
  • Node.js依赖管理与install及run命令详解
  • Redis实战-缓存的解决方案(一)
  • Flink直接缓冲存储器异常解析与解决方案
  • comfyUI背后的一些技术——CLIP
  • 暗影哨兵:安全运维的隐秘防线
  • 高并发AI服务部署方案:vLLM、TGI、FastChat性能压测报告
  • 使用 Fargate 在 AWS ECS 上运行 Spring Boot 应用程序
  • QML Charts组件之坐标轴示例
  • maven私服架构
  • Tesla智能座舱域控制器(MCU)的系统化梳理
  • ChainVault:重塑亚洲黄金交易基建,引领RWA金融新浪潮
  • Vue 3多语言应用开发实战:vue-i18n深度解析与最佳实践
  • 项目学习总结(4)
  • 【(含模板)滑动窗口 - LeetCode】3. 无重复字符的最长子串