【问题标题】:Will global variables be aligned to a 4 bytes boundary?全局变量会与 4 字节边界对齐吗?
【发布时间】:2015-03-10 17:39:32
【问题描述】:

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

section .data
    number1 DW 1234

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

【问题讨论】:

  • 如果“x86”是指 Intel/AMD 32 位或 64 位处理器(这是相当常见的用法),请记住对齐方式可能在 64-位案例,以及。尽管与 8 或 16 字节边界对齐的内容通常也可以在 4 字节边界上对齐...
  • @twalberg 我的意思是在 32 位处理器上。

标签: windows assembly x86 nasm memory-alignment


【解决方案1】:

是的。见nasm manual

NASM 假定的默认值,如果您未指定上述内容 限定词是:

section .data progbits alloc noexec write align=4

section .bss nobits alloc noexec write align=4

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

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

NASM 假定的默认值,如果您未指定上述内容 限定词是:

section .data 数据对齐=4

section .bss bss align=4

【讨论】:

    猜你喜欢
    • 2020-03-26
    • 2023-03-25
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 2013-03-05
    • 1970-01-01
    相关资源
    最近更新 更多