公司动态

Cortex-M3:为什么 ALIGN 默认填充 0x00,但有时又是 0xBF?

📅 2026/7/28 11:21:45
Cortex-M3:为什么 ALIGN 默认填充 0x00,但有时又是 0xBF?
难度:★★本文首发于我的嵌入式技术号「OneChan」,未经授权禁止转载。如果你经常和 ARM 汇编打交道,可能注意过一个奇怪的现象。同样是ALIGN 4,在数据段里,它填充的是0x00;到了代码段里,有时却变成了一串0xBF。你去看反汇编窗口,代码段末尾的空白区域全是BFBF BFBF。为什么同一个指令,在不同地方的表现截然不同?这不是汇编器抽风,而是 ARM 设计者有意为之——他们在代码段的空地上,埋下了一片“地雷阵”。今天这篇文章,就来拆解ALIGN填充值的决定机制,以及0xBF背后那条被低估的指令集安全哲学。一、ALIGN 的基本行为:补齐地址,填默认值ALIGN n的作用只有一个:把当前地址计数器推到 n 字节对齐的下一个边界上。比如当前地址是0x20000001,执行ALIGN 4后,地址变成0x20000004。中间跳过的 3 个字节,必须用某个值来填充。默认填充值是0x00。这是 ARM 汇编器文档里写得清清楚