我正在阅读有关数据对齐的内容。我知道当x86程序开始执行时,它的堆栈将与4字节边界对齐。但是.data和.bss部分也会与4字节边界对齐吗?例如,如果我有以下内容:
section .data
number1 DW 1234
当执行此代码的程序时,number1是否总是位于可被4整除的地址上?
答案 0 :(得分:3)
是。请参阅nasm manual:
如果您未指定上述内容,则NASM会采用默认值 限定符是:
section .data progbits alloc noexec write align = 4
部分.bss nobits alloc noexec write align = 4
请注意align=4
。这是ELF输出。您忘记指定使用的内容。
对于win32格式,相关部分为section 7.5.1:
如果您未指定上述内容,则NASM会采用默认值 限定符是:
部分.data data align = 4
部分.bss bss align = 4