全局变量会对齐到 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
我正在阅读有关数据对齐的内容。而且我知道当 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