全局变量会对齐到 4 字节边界吗?

Will global variables be aligned to a 4 bytes boundary?

我正在阅读有关数据对齐的内容。而且我知道当 x86 程序开始执行时,它的堆栈将对齐到 4 字节边界。但是 .data 和 .bss 部分是否也会与 4 字节边界对齐?例如,如果我有以下内容:

section .data
    number1 DW 1234

当执行具有此代码的程序时,number1 是否始终位于可被 4 整除的地址上?

是的。见 nasm manual:

The defaults assumed by NASM if you do not specify the above qualifiers are:

section .data progbits alloc noexec write align=4

section .bss nobits alloc noexec write align=4

注意上面写着 align=4。这用于 ELF 输出。您忘记指定您使用的是什么。

对于win32格式,相关部分是section 7.5.1:

The defaults assumed by NASM if you do not specify the above qualifiers are:

section .data data align=4

section .bss bss align=4