全局变量是否与4字节边界对齐?

时间:2015-01-12 21:06:44

标签: windows assembly x86 nasm memory-alignment

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

section .data
    number1 DW 1234

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

1 个答案:

答案 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